我的用例非常简单,但是我发现的所有教程都完成了整个push→build→push to ecr→部署。我已经有一个构建图像并将其推送到ECR的位桶管道,我需要的是某种方法来检测是否推送了新图像,然后用新图像更新ECS任务。到目前为止,这就是我的CodePipeline
管道的样子:
这是我的“部署”步骤的样子:
这是我得到的错误:
此外,如何连续更新ECS任务以使用最新图像?
答案 0 :(得分:0)
当您使用ECR作为源时,ECR会生成一个名为'imageDetail.json'的工件文件,其格式为[1]。但是ECS部署阶段需要一个名为'imagedefinitions.json'的文件,其格式不同[2]。
要提供所需的文件,请在源代码之间添加一个CodeBuild步骤,并使用以下buildspec进行部署:(基本转换文件)
version: 0.2
phases:
install:
runtime-versions:
docker: 18
build:
commands:
- apt-get install jq -y
- ContainerName="todo"
- ImageURI=$(cat imageDetail.json | jq -r '.ImageURI')
- printf '[{"name":"CONTAINER_NAME","imageUri":"IMAGE_URI"}]' > imagedefinitions.json
- sed -i -e "s|CONTAINER_NAME|$ContainerName|g" imagedefinitions.json
- sed -i -e "s|IMAGE_URI|$ImageURI|g" imagedefinitions.json
- cat imagedefinitions.json
artifacts:
files:
- imagedefinitions.json