【问题标题】:How to invoke a pipeline based on another pipeline success using AWS CodeCommit, CodeBuild, CodePipeline如何使用 AWS CodeCommit、CodeBuild、CodePipeline 基于另一个管道成功调用管道
【发布时间】:2020-11-01 14:10:25
【问题描述】:

期望的行为如下:

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

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

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

提前致谢

【问题讨论】:

    标签: amazon-web-services devops serverless aws-codepipeline aws-codecommit


    【解决方案1】:

    假设两个 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>
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 我会尝试这种方法并接受答案,如果它有效。谢谢!
      • 好的,如果您需要任何说明,请告诉我 :)
      • @GenaVerdel 那么,结果如何?
      • 为什么不能使用同一管道的不同阶段来实现相同的结果?
      • @berimbolo 可能是为了将生产与开发人员/预生产环境完全隔离。很多人可能可以访问您的工具帐户并在那里触发潜在的恶意管道。
      猜你喜欢
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 2022-07-22
      • 2020-12-28
      • 1970-01-01
      相关资源
      最近更新 更多