我的CodePipeline中有两个不同的源,ECR和S3。我的部署管道上传一个zip到S3,然后上传一个映像到ECR。
我需要CodePipeline只检测最后发生的ECR提交,然后触发S3源操作。然而,无论哪个先被检测到,都会启动CodePipeline,这会导致新版本的图像尚未上传的竞争条件。
我该如何解决此问题?根据CodePipeline的限制,我无法将S3移出Source阶段。我曾尝试将S3下载移到Lambda函数中,但似乎无法将zip作为输出工件传递回CodePipeline。
作为CodePipeline运行的触发器,只为ECR定义CloudWatch事件触发器,而不为S3更改定义。禁用管道内置触发器/触发器。
https://docs.aws.amazon.com/codepipeline/latest/userguide/create-cwe-ecr-source-console.html这将确保只有ECR触发管道执行。
如果预期的方法是将ECR提交与上传到S3的内容一起处理,并且假设它是完全相同对象名称的新版本,那么您可以将这些数据放入管道的构建阶段,像使用Lambda函数一样提取最新版本;或者具有识别该新S3对象的某种替代方式。
如果您将zip内容上传到S3并,然后提交ECR推送,那么您肯定可以将S3存储桶移出Source阶段,并使其在管道和触发器方面具有一定的独立性。在适当的阶段,这将是构建项目的另一个步骤。