Получение двух конвейеров для связи для развертывания в Beanstalk dev-env и последующего запуска интеграционных тестов с NewMan перед выпуском prod-env - PullRequest
0 голосов
/ 01 февраля 2020

То, что у нас уже есть (и работает)

Два разных конвейера:

  1. Мы извлекаем наш внутренний код SpringBoot из репозитория CodeCommit, выполняем mvn clean compile test и в случае успеха развертывание в среде Elasti c Beanstalk dev (которая использует конфигурацию Tomcat / Java8).

  2. У нас есть еще один репозиторий на CodeCommit, содержащий коллекцию PostMan, которая будет под управлением NewMan для интеграционных тестов. Его URL-адреса указывают на конечные точки dev. CodePipeline также используется для извлечения исходного кода, а затем для установки и запуска NewMan с помощью команд оболочки на этапе сборки. Файл buildspec.yml, используемый CodeBuild, настроен с nodejs: 10 в качестве runtime-versions. Однако этот конвейер необходимо запустить вручную, чтобы протестировать приложение.

Чего нам не хватает

Теперь мы хотим понять, как можно было бы:

  • вызывает нашу "IntegrationTestsPipeline" после успешного развертывания в среде dev
  • развертывание (после успешного завершения всех интеграционных тестов) в среде prod приложения, которое сейчас включено dev среда

У нас возникают проблемы с пониманием того, как два конвейера могут сообщать лайксы (или как объединить оба в один конвейер: еще лучше).

Точность

Я не тот человек, который изначально настроил всю инфраструктуру на AWS.

Каким-то образом, несмотря на то, что наше приложение развертывается в Beanstalk, фаза "Развертывание" ссылается на CloudFormation в качестве своего провайдера. На этом этапе перечислены два действия: GenerateChangeSet и ExecuteChangeSet. Я не уверен, что понимаю, почему это так (и как это точно работает): я бы подумал, что просто использовать Beanstalk в качестве поставщика для фазы развертывания было бы проще.

1 Ответ

1 голос
/ 02 февраля 2020

Основным c API для запуска конвейера является "StartPipelineExecution". Вы можете использовать Lambda для вызова действия [0] в вашем первом конвейере и вызвать API StartPipelineExecution [1] из Lambda с именем конвейера (второго конвейера), чтобы запустить конвейер. Другой вариант - использовать действие CodeBuild и вызвать 'start-pipe-execute' [2], используя aws cli.

Для вашего запроса относительно GenerateChangeSet и ExecuteChangeSet это хорошая практика, так как, когда вы генерируете ChangeSet, он дает вам возможность увидеть, какие изменения внесет CloudFormation перед тем, как фактически применить / выполнить эти изменения.

Ref:

[0] https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-invoke-lambda-function.html

[1] https://docs.aws.amazon.com/codepipeline/latest/APIReference/API_StartPipelineExecution.html

[2] https://docs.aws.amazon.com/cli/latest/reference/codepipeline/start-pipeline-execution.html

...