AWS Codepipeline не обновляет мой кластер ECS - PullRequest
0 голосов
/ 30 августа 2018

Я создал два стека, используя CloudFormation. Первый стек создает кластер с необходимыми ресурсами:

  • Балансировщик нагрузки
  • Группы автоматического масштабирования
  • Целевые группы
  • 1010 * Слушатели *
  • Экземпляры EC2
  • Определения задач и услуги
  • Etc ...

Второй стек используется для создания стека CodePipeline для настройки конвейера непрерывной доставки.

Поток должен быть следующим:

  • Пользователь отправляет код на Github
  • CodePipeline запускается, выполняя следующие этапы:
    • Исходный этап : извлекает код из Github
    • Стадия сборки : Создает изображение и переводит его в ECR
    • Этап развертывания : запускает STACK_UPDATE в первом стеке CloudFormation, описанном выше.
  • Сервисы кластера ECS обновляются с помощью обновления стека CloudFormation

Все работает нормально, но у меня проблема. Я обновляю код, и кажется, что приложение работает со старым кодом, то есть конвейер работает зеленым, но код не обновляется, когда я получаю доступ к URL-адресу балансировщика нагрузки. Я предполагаю, что это потому, что сценарии CloudFormation не изменились, но мой код изменился!

Что-нибудь нужно сделать, чтобы заставить стек CloudFormation обновляться? Или я должен выполнить развертывание в кластере ECS вместо CloudFormation на этапе развертывания?

1 Ответ

0 голосов
/ 11 сентября 2018

Насколько я могу судить, вам не хватает этапа развертывания приложения. Кажется, вы обновляете только инфраструктуру и не развертываете код приложения на этапе развертывания?

Как я привык его настраивать:

  • Шаблоны кода и инфраструктуры располагаются вместе с кодом
  • Нажатие кода запускает кодовую линию
  • Первый этап: проверить код из codecommit (или github в вашем случае)
  • (необязательно) codepipeline обновляется, чтобы иметь дело с изменениями в шаблоне codepipeline
  • Этап сборки: создать образ и перейти к ECR
  • Развертывание инфраструктура этап: запускает обновление стека облачной информации для стека инфраструктуры
  • Развертывание app этап: развертывание кода вашего приложения в инфраструктуре (что, по-видимому, отсутствует)

Этап развертывания приложения для ECS в шаблоне облачной информации будет выглядеть примерно так:

...
Stages:
    - Name: deploy-app
      Actions:
        - Name: Deploy
          ActionTypeId:
            Category: Deploy
            Owner: AWS
            Provider: ECS
            Version: 1
          InputArtifacts:
            - Name: build-output-artifact
          Configuration:
            ClusterName: 'my-cluster'
            ServiceName: 'my-service'
            FileName: 'imagedefinitions.json' (optional)

На этапе сборки, после того как вы отправили свой образ в ECR, вы записываете URL ECR в свой ECS imagedefinitions.json. Imagedefinitions.json должен быть выходным артефактом этапа сборки и входным артефактом этапа развертывания приложения.

Подробнее:

...