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