【问题标题】:AWS CodePipeline: How to make ECR Image build by CodeBuild as an artifact for the remaining stages?AWS CodePipeline:如何使 CodeBuild 构建的 ECR 映像作为剩余阶段的工件?
【发布时间】:2020-07-14 06:49:44
【问题描述】:

我的 CodePipeline 目前有一个 Github Source 和一个 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 |
+-----+      +------------+     +-----+

【问题讨论】:

    标签: amazon-web-services amazon-ecs aws-codepipeline aws-codebuild aws-ecr


    【解决方案1】:

    您应该定义一个工件,它将是一个名为 imagedefinitions.json 的 json 文件,用于 ECS 标准部署操作,或 imageDetail.json 用于 Amazon ECS 蓝/绿部署操作。参考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
    

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

    【讨论】:

      【解决方案2】:

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

      然后在您的 CodeDeploy 步骤中,还使用输入工件作为源,然后指定 $CODEBUILD_RESOLVED_SOURCE_VERSION 作为您希望 CodeDeploy 部署的图像标签。

      一个额外的好处是,使用 git hash 作为容器版本允许您从图像标签中引用 git pull 请求,这对可见性很有好处。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-18
        • 2017-05-02
        • 2022-08-03
        • 2020-12-05
        • 2021-04-11
        • 1970-01-01
        • 2022-11-08
        相关资源
        最近更新 更多