Развертывание одного проекта Codebuild в нескольких контейнерах ECS - PullRequest
0 голосов
/ 24 октября 2018

Я успешно использую codebuild & codepipeline для непрерывного развертывания на ECS для нескольких проектов, но столкнулась с проблемой.В этом проекте мне нужно развернуть одну и ту же сборку в четырех разных контейнерах ECS .

. По умолчанию я использую CD с кодовой сборкой и кодовой линией, как показано в документах aws - я создаю файл imagedefinitions.jsonв конце процесса сборки.Насколько я вижу, этот файл может содержать определение только одного контейнера ECS .

Необходимо указать имя контейнера:

post_build:
commands:
  - echo Build completed on `date`
  - echo Pushing the Docker images...
  - docker push $REPOSITORY_URI:latest
  - docker push $REPOSITORY_URI:$IMAGE_TAG
  - echo Writing image definitions file...
  - printf '[{"name":"hello-world","imageUri":"%s"}]' $REPOSITORY_URI:$IMAGE_TAG > imagedefinitions.json
artifacts:
files: imagedefinitions.json

Дляэто определение задачи:

{
"taskDefinition": {
"family": "hello-world",
"containerDefinitions": [
  {
    "name": "hello-world",
    "image": "012345678910.dkr.ecr.us-west-2.amazonaws.com/hello-world:6a57b99",
    "cpu": 100,
    "portMappings": [
      {
        "protocol": "tcp",
        "containerPort": 80,
        "hostPort": 80
      }
    ],
    "memory": 128,
    "essential": true
  }
]

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

Теперь мне интересно, могу ли я вообще использовать codepipeline для ECS в этом проекте или я должен развернуть другим способом.

1 Ответ

0 голосов
/ 24 октября 2018

Действие CodeBuild в codePipeline в настоящее время поддерживает только один выходной артефакт.Вы можете сжать все файлы определений изображений в один zip-файл и добавить лямбда-действие, чтобы разделить его на несколько артефактов и использовать их в действиях по развертыванию ECS.

...