首页 > 解决方案 > AWS CDK Codepipeline 在 cdk-synth 之前构建 docker

问题描述

我的用例如下:

  1. Github 存储库 A、B 和 C 有 Lambda 的源代码。A 和 B 是库,C 是使用库 A 和 B 的应用程序。
  2. GitHub 存储库 X 具有 AWS CDK 源代码
  3. 每次对 A、B、C 或 X 中的任何一个进行 git 提交时,都需要在 Docker 中重新构建应用程序 C,并将工件(应用程序和编译的库)打包到生产 Docker 中——通常的多阶段 Docker .
  4. 生产 Docker 需要推送到 ECR
  5. 由于 X 中的任何更改而导致的任何基础设施更改现在也必须进行 cdk-synthesised 和 cdk-deployed。
  6. 最后 Lambda 需要使用来自 ECR 的更新图像,我想这会在cdk-deploy上面自动发生

我希望通过 CDK 通过自变异 CodePipeline 完成此操作。

我无法弄清楚如何设置这个多存储库 cdk 代码管道的详细信息。有带有属性的新(er)aws_cdk.pipelines模块。synth我是否应该使用单个按上述给定顺序依次指定所有构建步骤ShellStep?AShellStep只能指定一个input来源,而我需要全部 4 个(A、B、C 和 X)。

例如(蟒蛇):

aws_cdk.pipelines.CodePipeline(self, 'Pipeline',
   ...,
   synth=ShellStep("<...>",
      input=<only one repo allowed to be specified>

Q1)实现上述代码构建和自我变异步骤的正确方法是什么?

Q2)由于cdk synth其他构建可能会在提交到 GitHub 之前在本地运行,我正在考虑创建一个带有构建环境的 docker 映像,作为本地构建的一部分,我可以在本地构建和测试所有需要的存储库。这将为每个人提供一个编译和工件生成正常工作的环境。然后这个 Docker dev-image 可以被推送到 ECR。在这种情况下,CodePipeline 将只读取 Dockerfile(存在于 X 中),在 docker 中构建 A、B 和 C,然后像往常一样使用工件创建生产 Docker 映像(多阶段 Docker 构建),将其推送到ECR,再次重启dev-docker,这次运行cdk-synth+cdk-deploy,将凭据作为环境变量传递给 dev-docker 容器。这种方法会奏效吗?如何获取要传递CodePipeline给 docker 容器的凭据?

标签: amazon-web-servicesaws-cdkaws-codepipelineaws-codebuild

解决方案


推荐阅读