我们有一个带有web和worker节点的应用程序,两者的代码在同一个git中,但被部署到不同的自动缩放组中。问题是只有一个appspec文件,但是web/worker节点的部署脚本(AfterInstall、AppStart等)不同。如何将CodeDeploy设置为同时部署两个应用程序并执行不同的部署脚本?
- (现在我们有一个appspec文件,它只调用厨师配方,根据节点的角色执行不同的操作)
我知道这个问题很老了,但我最近也遇到了同样的问题,并找到了一种简单的方法来解决它。
我在同一个git上添加了两个appspec文件:appspec-staging.yml
,appspec-storybook.yml
。
还添加了两个构建规范文件buildspec-staging.yml
、buildspec-storybook.yml
(AWS CodeBuild允许指定构建规范文件)。
我们的想法是,在构建完成后,我们将把特定的appspec-xx.yml文件复制并重命名为最终的appspec.yml文件,所以最后,在CodeDeploy阶段,我们将有一个合适的appspec_yml文件来部署。以下命令适用于linux环境。
post_build:
commands:
- mv appspec-staging.yml appspec.yml
您可以利用代理在部署脚本中公开的环境变量来确定要部署的部署组。以下是如何使用它们https://blogs.aws.amazon.com/application-management/post/Tx1PX2XMPLYPULD/Using-CodeDeploy-Environment-Variables
谢谢,Surya。
更新-根据亚马逊技术支持代表的说法,这是不可能的。他们建议为不同的环境(prod、staging、dev等)和不同的应用程序提供单独的git。使共享代码变得更加困难,但可能是可行的。
我解决这个问题的方法是在项目的根目录中有一个appspec.yml.web和一个appsspec.yml.worker。然后我在詹金斯有两份工作;一个对应于工作者和web部署。在每种情况下,它都会将适当的一个重命名为appspec.yml,并进行绑定以发送到codedeploy。