CDK 流水线分支策略

CDK pipelines branching strategy

CDK 流水线默认情况下似乎只适用于一个分支。我是不是遗漏了什么或者有办法:

理想情况下我们不希望把所有的东西都推到master分支去部署到dev/test,这样我们就可以保持master分支干净、整洁、稳定。

我考虑过使用多个管道,一个用于开发,一个用于测试,一个用于主控,这可以解决问题,但感觉不是最干净的解决方案。

有推荐的模式吗?

AWS 规定的最佳实践是使用基于主干的开发。

因此,单个管道不能使用多个分支干净地部署到不同的环境。

您应该考虑创建一个单独的管道,该管道又会创建特定于环境的管道。

这是 CDK 存储库中的一个相关问题: https://github.com/aws/aws-cdk/issues/9461

代码管道无法分支。它不是为了这样做而设计的。

如果您绝对必须有多个环境和一个管道,一个解决方案是拥有一个中间有手动批准步骤的多阶段管道。

也就是

Source (Dev branch) -> Build/Deploy -> Manual Approval step -> 使用 Codebuild 或 lambda 将你现在测试过的代码(仍在工件链中)移动到你的测试分支为你(即利用 git 服务器 api 根据启动链的初始提交的提交消息启动合并 -> 另一个构建。/部署到你的测试环境(甚至可以在此处进行跨帐户部署)-> 手动批准步骤-> 重复多次,直到部署到生产环境。

但是....这完全是一种技巧。你最好使用多个管道。我会使用 CDK 来动态调整管道本身的 cloudformation 模板以处理 Dev/Prod 然后简单地部署它两次,将一个链接到 Dev 的源,一个链接到 Main 的源。

解决方案

基于@gshpychka 所说的

部署管道的管道。网上找了很多过于复杂的解决方案,但最后发现还是挺简单的。

只需为我们希望部署的每个分支添加额外的管道。

构建分支管道的核心管道。

仅需要在以下任何一项之间更改的变量:

  • 账户 ID
  • 环境名称
  • 分行名称

帐户模式

  • 建造
  • 开发
  • 分期
  • 产品

core-pipeline

分支机构

硕士

  • Webhook -> null(因此它不会在每次构建时触发)

部署:

  • master-pipeline -> 建立账户
  • staging-pipeline -> 建立账户

master-pipeline

分支机构

硕士

部署

  • 应用程序堆栈 -> 产品帐户

staging-pipeline

分支机构

分期

部署

  • 应用程序堆栈 -> 暂存帐户