如何使用 AWS CodeCommit、CodeBuild、CodePipeline 根据另一个管道成功调用管道

Gen*_*del 10 amazon-web-services devops aws-codecommit aws-codepipeline serverless

期望的行为如下:

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

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

如果您有任何其他想法,我很高兴听到!

提前致谢

小智 11

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

在 post_build 阶段,您可以使用 AWS 开发工具包命令触发第二个 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>
Run Code Online (Sandbox Code Playgroud)


Chr*_*ams 6

我建议的第二个管道触发器的解决方案如下:

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

为了保持清洁,请为每个管道使用单独的桶。

  • @berimbolo 可能是为了将生产与开发人员/预生产环境完全隔离。许多人可能有权访问您的工具帐户并触发那里的潜在恶意管道。 (2认同)