Cloudfoundry 上 node.js 应用程序的蓝/绿部署
Posted
技术标签:
【中文标题】Cloudfoundry 上 node.js 应用程序的蓝/绿部署【英文标题】:Blue/green deployment for node.js application on cloudfoundry 【发布时间】:2015-06-19 07:38:36 【问题描述】:是否有任何工具可以在 cloudfoundry 上为 node.js 应用程序自动部署蓝/绿。我已经尝试过 cloudfoundry gradle 插件(https://github.com/cloudfoundry/cf-java-client/tree/master/cloudfoundry-gradle-plugin),但它需要带有 jar/war 文件的文件参数,该文件在节点应用程序中不存在。如何在 Cloudfoundry 中自动化节点应用的蓝/绿部署?
【问题讨论】:
【参考方案1】:Bluemix 文档包含一个简短的教程 [1],介绍如何影响蓝/绿零停机时间部署(也称为 A/B 部署)。本教程提供了两种方法。我推荐第二个,它使用“cf map-route”和“cf unmap-route”命令让您的应用程序的两个版本共享一条路线。您使用只有您自己知道的路由来部署新版本。测试以确保其行为符合预期,然后将原始路由映射到新版本,以便应用程序的新旧版本共享相同的路由。然后,您可以将旧版本缩小(为零实例)并在将两个版本映射到同一路由后扩大另一个版本。当您缩小实例时,弹性运行时将确保在终止实例之前停止任何活动请求。
Tim Spann 的本教程 [2] 也非常擅长解释,并引用了 Matt Stine 发布的另一个重要资源,该资源在发布时很棒,但现在有点过时了 w/r/t cf cli 语法。
这是一个自动化示例 [3],我们必须影响 cloudfoundry.org Web 应用程序的蓝/绿部署。希望您可以根据自己的需要重新调整用途。
另一个很好的教程 [4],其中包括自动化并描述了如何在 IBM DevOps Services 中集成蓝/绿部署自动化。
[1]https://www.ng.bluemix.net/docs/#manageapps/index-gentopic3.html#genTopProcId4
[2]http://www.cloudfoundry.rocks/blue-green-deployment-with-cloudfoundry/
[3]https://github.com/cloudfoundry/cloudfoundry.org/blob/master/publish.sh
[4]http://ryanjbaxter.com/2015/04/15/performing-zero-downtime-deployments-from-ibm-devops-services-to-bluemix/
【讨论】:
我应该注意,虽然我参考了 Bluemix 的文档; IBM Bluemix 基于 Cloud Foundry,因此该指南同样适用于大多数基于 Cloud Foundry 的产品,当然也适用于 Cloud Foundry 的任何 OSS 部署。 谢谢,但问题是如何自动化蓝/绿部署而不是如何做到这一点。我想在每次提交开发分支时部署新版本的应用程序(持续部署)。它甚至可以每天发生3次。我不想在那里有手动步骤。 Piotr,谢谢,我想我有一个脚本可能会有所帮助。 不要忘记环境变量。我必须将三个环境变量从蓝色复制到绿色(或相反)才能使我的应用程序正常工作。【参考方案2】:Cloud Foundry 有一个社区插件,可以自动执行蓝绿色部署。来源是https://github.com/bluemixgaragelondon/cf-blue-green-deploy。 要使用,请在部署脚本中执行以下操作:
cf install-plugin blue-green-deploy -r CF-Community
cf blue-green-deploy <app_name> --smoke-test <path to test script>
(烟雾测试是可选的,但很明智。)
如果测试脚本以零退出代码退出,插件会将所有路由从当前实时应用重新映射到新应用。
【讨论】:
以上是关于Cloudfoundry 上 node.js 应用程序的蓝/绿部署的主要内容,如果未能解决你的问题,请参考以下文章
如何从 CloudFoundry 向 AWS-sdk 提供凭证
如何在cloudfoundry上使用kafka和storm?
Bluemix/CloudFoundry + Meteor - 如何重置项目?
将 grails 2.0.3 应用程序部署到 cloudfoundry 而不使用 cloudfoundry grails-plugin?