【发布时间】:2019-08-15 19:35:55
【问题描述】:
基本上,我需要为 ECS 容器配置带有 bitbucket 源代码的 CI/CD。我想使用 CodePipline 将新的 ECR 映像部署到 ECS。
目前,AWS CodePipline 中没有将 bitbucket 指定为源的选项。但是,我设法使用 webhook 配置 CodeBuild,以便它构建 docker 文件并在每次推送到发布分支时将其推送到 ECR。
我想将 ECR 配置为 CodePipline 中的“源”阶段,并将其部署到现有的 ECS 集群/服务,以便自动部署。
- 我在源阶段使用“image_details”输出工件将“Amazon ECR”指定为操作提供程序。
- 我将“Amazon ECS”(不是“Amazon ECS(蓝/绿)”)指定为部署阶段的操作提供程序,并将“image_details”作为输入工件
很遗憾,如果在部署步骤中出现以下错误,则会导致基本配置和工件链接:
Invalid action configuration
The image definition file imageDetail.json contains invalid JSON format
虽然“Amazon ECR”阶段提供了 imageDetail.json 作为输出工件,但“Amazon ECS”部署提供程序似乎并不期望它。有什么合理的方法可以解决这个问题吗?
我知道,可以使用 bitbucket + API Gateway/Lambda + CodePipeline 配置 CI/CD,我还考虑使用 CodeCommit 而不是 bitbucket 作为源存储库 - 不过,希望有一个可能的优雅解决方案直接将 bitbucket 与 CodePipeline 一起使用。
统一更新: 我最终得到了相当不错的配置,在this blogpost 中进行了描述:总体思路是允许 CodeBuild 将源代码从 bitbucket 上传到 S3,然后使用 CodePipeline 和 S3 作为源将新的 docker 映像部署到 ECR 并发布ECS 集群中的新任务定义修订。 S3 仍然是开销,我正在为该任务寻找更优雅的解决方案。
【问题讨论】:
-
嗨,谢尔盖,您有没有机会找出发生这种情况的原因,我们无法将 ECR 设置为源并将 docker 映像部署到 ECS?
imageDetail.json也遇到过同样的问题? -
@statut 嗨!原来的问题仍然是开放的。我决定改用另一个管道。这个想法在lgallardo.com/2018/09/07/codepipeline-bitbucket 中有描述。根据我的观察,ECR 的 imageDetail.json 输出不能用于部署,所以我可能会尝试使用“Invoke”lambda 阶段将 imageDetail.json 转换为以下格式的 imagedefinitions.json:[{"name":""," imageUri":""}]
-
谢谢!提供的格式帮助了我
-
@statut 如果您提供有关最终解决方案的一些详细信息,我们将不胜感激,以便我们将其标记为已接受的答案。会对社区有所帮助。
-
整个最初的问题是 CodePipeline 不支持 bitbucket 作为源提供程序。 AWS 现在已添加此功能:aws.amazon.com/blogs/devops/… - 然而,它有其局限性,因此该线程中讨论的解决方案对于某些商业开发场景仍然有用。
标签: amazon-ecs aws-codepipeline aws-codebuild aws-ecr