AWS CDK CodePipeline развертывание приложений и CDK

#amazon-web-services #continuous-integration #continuous-deployment #aws-cdk #aws-codepipeline

Вопрос:

Я использую AWS CDK с typescript и хотел бы автоматизировать развертывание пакетов CDK и кода.

У меня есть 2 репозитория на github: app-cdk и app-website .

Я настроил кодовую линию следующим образом:

 const pipeline = new CodePipeline(this, 'MyAppPipeline', {  pipelineName: 'MyAppPipeline',    synth: new ShellStep('Synth', {  input: CodePipelineSource.gitHub(`${ORG_NAME}/app-cdk`, BRANCH_NAME, {  }),  commands: ['npm ci', 'npm run build', 'npx cdk synth']  })  });   

и добавил бета — стадию следующим образом

 pipeline.addStage(new MyAppStage(this, 'Beta', {  env: {account: 'XXXXXXXXX', region: 'us-east-2' }  }))  

Это прекрасно работает, когда я отправляю код в свой пакет кода CDK и развертываю новые ресурсы. Как я могу добавить репо своего веб-сайта в качестве источника для запуска этого конвейера, построить его по-другому и развернуть активы в необходимых ресурсах? Разве это не должно быть частью исходных текстов и этапов сборки CodePipeline?

Комментарии:

1. Если я правильно понимаю, я думаю, вам нужны два конвейера CodePipeline, которые независимо отслеживают изменения в двух репозиториях. Чтобы фактически развернуть изменения, вы должны расширить шаг оболочки (или создать новый), включив в него «развертывание npx cdk».

2. @Norman Может ли это быть не один трубопровод? Что сначала самоизменится и развернет все необходимые ресурсы AWS, а затем развернет само приложение?

3. Вы можете добавить в конвейер несколько источников, точно так же, как вы добавили бы любое другое действие.

4. Как я могу связать этот новый источник с другим действием сборки? Не синтезатор cdk, а сборка npm? Не похоже, что API CodePipeline обеспечивает это

5. Трубопровод всегда делает одно и то же. Я бы сказал, что вам нужна другая логика, вам нужен другой конвейер. То, о чем я говорил, — это один конвейер с двумя источниками, который выполняет как сборку npm, так и синтез cdk

Ответ №1:

Я столкнулся с аналогичным сценарием, когда мне пришлось создать конвейер CDK для нескольких статических сайтов S3 в репозитории.

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

В то время как мои статические веб-сайты S3 были конструкцией (BucketDeployment).

Способ, которым я справился с этой интеграцией, заключается в следующем

 deployment_code_build = cb.Project(self, 'PartnerS3deployment',  project_name='PartnerStaticS3deployment',  source=cb.Source.git_hub(owner='lt;github-orggt;',  repo='lt;repo-namegt;', clone_depth=1,  webhook_filters=[  cb.FilterGroup.in_event_of(  cb.EventAction.PUSH).and_branch_is(  branch_name="main")]),  environment=cb.BuildEnvironment(  build_image=cb.LinuxBuildImage.STANDARD_5_0  ))  

Это добавило/подготовило проект сборки кода, который будет динамически развертывать наборы изменений cdk ls

Для вышеупомянутого проекта сборки кода потребуется файл buildspecfile в корневом каталоге репозитория со следующим кодом (для справки)

 version: 0.2 phases:  install:  commands:  - echo Entered in install phase...  - npm install -g aws-cdk  - cdk --version  build:  commands:  - pwd  - cd cdk_pipeline_static_websites  - ls -lah   - python -m pip install -r requirements.txt  - nohup ./parallel_deploy.sh amp; echo $! gt; pidfile amp;amp; wait $(cat pidfile)  finally:  - echo Build completed on `date`  

Содержимое parallel_deploy.они заключаются в следующем

 #!/bin/bash for stack in $(cdk list);  do   cdk deploy $stack --require-approval=never amp; done;  

Хотя это отлично работает, должна быть более простая альтернатива, которая может напрямую импортировать другие стеки/конструкции в класс конвейера CDK.