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

问题描述 投票:0回答:3

期望的行为如下:

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

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

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

提前致谢

amazon-web-services devops serverless aws-codepipeline aws-codecommit
3个回答
9
投票

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

4
投票

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

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

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


0
投票

我在这个帖子中使用了 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>"
        }
    ]
}
© www.soinside.com 2019 - 2024. All rights reserved.