所需的行为如下:
- 推送代码更改
- 为每个无服务器组件运行单元测试
- 如果所有测试都成功,请将组件部署到暂存环境中,并将生成标记为成功
- 听取此更改并使用小黄瓜运行验收测试套件
- 如果所有测试都成功,则将组件部署到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>"
}
]
}