使用 CodeDeploy 从同一个 git 部署 2 个应用程序

问题描述 投票:0回答:5

我们有一个带有 Web 和工作节点的应用程序 - 两者的代码位于同一个 git 中,但部署到不同的自动缩放组。问题是只有一个 appspec 文件,但 Web/worker 节点的部署脚本(AfterInstall、AppStart 等)不同。我将如何设置我的 CodeDeploy 来部署这两个应用程序并执行不同的部署脚本?

  • (现在我们有一个 appspec 文件,它只调用厨师食谱,根据节点的角色执行不同的操作)
aws-code-deploy
5个回答
6
投票

我知道这个问题很老了,但我最近有同样的问题/问题,并找到了一种简单的方法来使其发挥作用。

我在同一个 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

2
投票

您可以在部署脚本中使用代理公开的环境变量来识别正在部署哪个部署组。 以下是如何使用它们https://blogs.aws.amazon.com/application-management/post/Tx1PX2XMPLYPULD/Using-CodeDeploy-Environment-Variables

谢谢, 苏里亚。


1
投票

更新 - 据亚马逊技术支持代表称,这是不可能的。 他们建议为不同的环境(prod、staging、dev 等)和不同的应用程序使用单独的 git。 使得共享代码变得更加困难,但可能是可行的。


0
投票

我解决这个问题的方法是在项目的根目录中有一个 appspec.yml.web 和一个 appspec.yml.worker 。然后我在 Jenkins 有两份工作;分别对应于工作线程和 Web 部署。在每一个中,它将相应的重命名为 appspec.yml 并进行捆绑以发送到 codedeploy。


0
投票

虽然这是一个老问题,但我最近在 AWS codepipeline 中遇到了同样的问题。我尝试后的工作是在代码构建阶段,在该工件的根目录中输出具有所需

appspec.yml
的工件,您还可以将其他必要的文件包含在一起,并使用此工件作为代码部署阶段的源。

您应该为同一分支中的不同

appspec.yml
文件构建单独的代码管道。

© www.soinside.com 2019 - 2024. All rights reserved.