如何使用 AWS CodeCommit、CodeBuild、CodePipeline 调用基于另一个管道成功的管道
How to invoke a pipeline based on another pipeline success using AWS CodeCommit, CodeBuild, CodePipeline
期望的行为如下:
- 推送代码更改
- 运行 每个无服务器组件的单元测试
- 如果所有测试都成功,将组件部署到暂存环境并将构建标记为成功
- 收听此更改并运行 使用 Gherkin 的验收测试套件
- 如果所有测试都成功,将组件部署到 UAT/Prod 环境中并将构建标记为成功
所需的解决方案将有两个管道,第二个管道由第一个管道的成功触发。
如果您有任何其他想法,我将很高兴听到!
提前致谢
我为第二个管道触发器提出的解决方案如下:
- 将第二个管道源作为 S3(不是 CodeCommit)。这将确保只有当一个特别命名的文件(对象键)被推送到 Amazon S3 时,这个管道才会启动。
- 在第一个 CodePipeline 的末尾添加一个 Lambda 函数,此时一切都必须成功才能触发它。
- 让 Lambda 复制您为第一个管道构建的工件,并将其放入具有第二个存储桶源中引用的密钥的存储桶中。
为了保持清洁,为每个管道使用单独的桶。
假设两个 CodePipelines 运行 在同一个帐户中。您可以在 buildspec.yml.
中添加“post_build”阶段
在 post_build 阶段,您可以使用 AWS SDK 命令触发第二个 CodePipeline。
build:
commands:
# npm pack --dry-run is not needed but helps show what is going to be published
- npm publish
post_build:
commands:
- aws codepipeline start-pipeline-execution --name <codepipeline_name>
期望的行为如下:
- 推送代码更改
- 运行 每个无服务器组件的单元测试
- 如果所有测试都成功,将组件部署到暂存环境并将构建标记为成功
- 收听此更改并运行 使用 Gherkin 的验收测试套件
- 如果所有测试都成功,将组件部署到 UAT/Prod 环境中并将构建标记为成功
所需的解决方案将有两个管道,第二个管道由第一个管道的成功触发。
如果您有任何其他想法,我将很高兴听到!
提前致谢
我为第二个管道触发器提出的解决方案如下:
- 将第二个管道源作为 S3(不是 CodeCommit)。这将确保只有当一个特别命名的文件(对象键)被推送到 Amazon S3 时,这个管道才会启动。
- 在第一个 CodePipeline 的末尾添加一个 Lambda 函数,此时一切都必须成功才能触发它。
- 让 Lambda 复制您为第一个管道构建的工件,并将其放入具有第二个存储桶源中引用的密钥的存储桶中。
为了保持清洁,为每个管道使用单独的桶。
假设两个 CodePipelines 运行 在同一个帐户中。您可以在 buildspec.yml.
中添加“post_build”阶段在 post_build 阶段,您可以使用 AWS SDK 命令触发第二个 CodePipeline。
build:
commands:
# npm pack --dry-run is not needed but helps show what is going to be published
- npm publish
post_build:
commands:
- aws codepipeline start-pipeline-execution --name <codepipeline_name>