如何使用AWS CodeCommit、CodeBuild、CodePipeline在另一个管道成功的基础上调用管道



所需的行为如下:

  • 推送代码更改
  • 为每个无服务器组件运行单元测试
  • 如果所有测试都成功,请将组件部署到暂存环境中,并将生成标记为成功
  • 听取此更改并使用小黄瓜运行验收测试套件
  • 如果所有测试都成功,则将组件部署到UAT/Prod环境中,并将构建标记为成功

所需的解决方案将有两个管道,第二个管道由第一个管道的成功触发。

如果你还有其他想法,我很高兴听到!

提前感谢

假设两个CodePipelines都在同一个帐户中运行。您可以添加";post_build";在您的buildspec.yml.中的阶段

在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>

我为第二个管道触发器提出的解决方案如下:

  • 将第二个管道源作为S3(而不是CodeCommit(。这将确保只有当一个特定命名的文件(对象密钥(被推送到AmazonS3时,这个管道才会启动
  • 在第一个CodePipeline的末尾添加了一个Lambda函数,此时一切都必须成功触发
  • 让Lambda复制您为第一个管道构建的工件,并将其放置在第二个bucket源中引用的键所在的bucket中

为了保持清洁,每条管道都要使用一个单独的桶。

我在这个线程中使用了Amin的答案,因为这是一个针对特定用例的非常简单的解决方案。

- aws codepipeline start-pipeline-execution --name <codepipeline_name>

除此之外,您可能必须在IAM中为试图触发所需管道的代码构建角色添加管道执行权限。

IAM政策示例:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"codepipeline:StartPipelineExecution"
],
"Resource": "arn:aws:codepipeline:<region>:<account-id>:<pipeline-name>"
}
]
}

相关内容

最新更新