CDK 流水线分支策略
CDK pipelines branching strategy
CDK 流水线默认情况下似乎只适用于一个分支。我是不是遗漏了什么或者有办法:
- 有一个开发分支部署到开发账户/env
- 测试分支部署到测试 account/env。
- jons-cool-feature-branch 到 X account/env 等
理想情况下我们不希望把所有的东西都推到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
分支机构
分期
部署
- 应用程序堆栈 -> 暂存帐户
CDK 流水线默认情况下似乎只适用于一个分支。我是不是遗漏了什么或者有办法:
- 有一个开发分支部署到开发账户/env
- 测试分支部署到测试 account/env。
- jons-cool-feature-branch 到 X account/env 等
理想情况下我们不希望把所有的东西都推到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
分支机构
分期
部署
- 应用程序堆栈 -> 暂存帐户