AWS CodePipeline:如何使CodeBuild生成的ECR图像作为其余阶段的工件?

我的CodePipeline当前具有一个Github源代码和一个CodeBuild,后者可生成图像并将其推送到ECR:

+---------------+      +-----------+     +-----+
| GitHub Source +----->+ CodeBuild +---->+ ECR |
+---------------+      +-----------+     +-----+

我想在管道中添加一个CodeDeploy步骤,该步骤将把映像推送到ECR并将其部署在ECS上。但是我的CodeBuild步骤不会产生任何工件(它会上传到ECS,而且我不知道如何将ECR图像定义为工件)。因此,我无法将CodeDeploy连接到管道。知道怎么做吗?

+---------------+      +-----------+     +-----+      +------------+     +-----+
| GitHub Source +----->+ CodeBuild +---->+ ECR +----->+ CodeDeploy +---->+ ECS |
+---------------+      +-----------+     +-----+      +------------+     +-----+

我能想到的唯一解决方案是建立第二条管道,以ECR为源,并进行部署。

     Pipeline 1
+---------------+      +-----------+     +-----+
| GitHub Source +----->+ CodeBuild +---->+ ECR |
+---------------+      +-----------+     +-----+

 Pipeline 2
+-----+      +------------+     +-----+
| ECR +----->+ CodeDeploy +---->+ ECS |
+-----+      +------------+     +-----+
jun8888888 回答:AWS CodePipeline:如何使CodeBuild生成的ECR图像作为其余阶段的工件?

您应该定义一个工件,对于ECS Standard部署操作,该工件将是一个名为imagedefinitions.json的json文件,对于Amazon ECS蓝/绿部署操作,该工件将是一个名为imageDetail.json的json文件。在参考文献here中对此进行了说明。

就我而言,由于我正在执行标准部署,因此在构建结束时向buildspec.yml添加了两个额外的命令:

  phases: 
    build: 
      commands: 

        ...Build and push to ECR...

        echo Generating imagedefinitions.json
        echo '[{"name":"<CONTAINER-NAME>","imageUri":"'<IMAGE-URI>"}]' > imagedefinitions.json
  artifacts:
    files:
      - imagedefinitions.json

,然后将文件添加为工件。

,

不确定如何对ECR图像进行版本控制,但可以使用git哈希对它们进行版本控制,该git哈希可以在代码构建中作为环境变量$ CODEBUILD_RESOLVED_SOURCE_VERSION获得(注意:输入工件必须是此env变量可用的Source )。

然后在您的CodeDeploy步骤中,也将输入工件用作源,然后将$ CODEBUILD_RESOLVED_SOURCE_VERSION指定为要CodeDeploy部署的映像标记。

使用git哈希作为容器版本的额外好处是,您可以从image标记引用git pull请求,这对于可见性很有帮助。

本文链接:https://www.f2er.com/2528934.html

大家都在问