AWS CodePipeline: как сделать сборку образа ECR с помощью CodeBuild в качестве артефакта для оставшихся этапов?

Мой 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 |
+-----+      +------------+     +-----+

person daltonfury42    schedule 02.04.2020    source источник


Ответы (2)


Вы должны определить артефакт, которым будет файл json с именем imagedefinitions.json для действий развертывания ECS Standard или imageDetail.json для действий развертывания Amazon ECS Blue / Green. Это объясняется в ссылке, здесь.

В моем случае, поскольку я выполнял стандартное развертывание, я добавил в 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

а затем добавил файл как артефакт.

person daltonfury42    schedule 03.04.2020

Не уверен, как вы управляете версиями своих изображений ECR, но вы можете версировать их с помощью хэша git, который можно получить в сборке кода как переменная среды $ CODEBUILD_RESOLVED_SOURCE_VERSION (примечание: входной артефакт должен быть источником, чтобы эта переменная env была доступна).

Затем на этапе CodeDeploy также используйте входной артефакт в качестве источника, затем укажите $ CODEBUILD_RESOLVED_SOURCE_VERSION в качестве тега изображения, который вы хотите развернуть CodeDeploy.

Дополнительный бонус, использование хэша git в качестве версии контейнера, позволяет ссылаться на запрос git pull из тега изображения, что удобно для видимости.

person richardd    schedule 02.04.2020