AWS CodePipeline: Как создать ECR Image с помощью CodeBuild в качестве артефакта для оставшихся этапов? - PullRequest
0 голосов
/ 02 апреля 2020

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

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Вы должны определить артефакт, который будет json файлом с именем imagedefinitions.json для стандартных действий по развертыванию ECS или 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

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

0 голосов
/ 02 апреля 2020

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

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

Дополнительный бонус, использующий git га sh в качестве контейнерной версии, позволяет ссылаться на запрос извлечения git из тега изображения, который удобен для наглядности.

...