Рубрики
Uncategorized

Базовый трубопровод развертывания CDK с действиями GitHub

Вступление На момент написания действий GitHub есть бесплатный уровень, позволяющий 2000 минут … Tagged с AWS, GitHub, DevOps.

На момент написания Действия GitHub Имеет бесплатный уровень, позволяющий 2000 минут в месяц сборки для частных репо. Для небольших/побочных проектов, которые уже размещены на GitHub, легко настроить рабочий процесс на основе пиара для автоматизации процесса развертывания.

Процесс CI/CD, подходящий для небольшого проекта, может быть:

  • PR Workflow:

    • При каждом обращении за запрос на предмет основного филиала:
      • Запустите все тесты
      • запустить CDK Synth и для создания каталога облачной сборки (cdk.out) с последними изменениями
      • запустить cdk diff с созданной облачной сборкой
      • Разместите Diff в качестве комментария к PR
  • Основной рабочий процесс:

    • На каждом коммите в главном ветви:
      • Приобретать артефакт cdk.out от PR Workflow Synther
      • запустить CDK применить С этой облачной сборкой

В настоящее время действия GitHub не позволяют слишком легко делиться артефактами между различными рабочими процессами (см. https://github.com/actions/download-artifact/issues/3 ) Теперь это возможно через API, но до тех пор, пока он не будет отполирован, мы внесем изменения в основной рабочий процесс следующим образом:

  • Основной рабочий процесс:
    • На каждом коммите в главном ветви:
      • бежать CDK Synth и Для создания каталога облачных сборок (cdk.out) с последними изменениями
      • запустить CDK применить с созданной облачной сборкой

Используя то же репо, что и ранее введено https://github.com/markdingram/bazel-cdk-clojure , a Pr.yml Workflow добавлен.

В стороне: я потерял счет количества сломанных ссылок, которые я видел, не используя постоянные ссылки на Github — чтобы получить постоянную ссылку, просто нажмите у

В то время как в генерации каталога cdk.out используется Bazel, Diff/Применение этого продукта выполняется без ссылки на Bazel с использованием NPM, установленного BINARDES CDK. Упрощение этого примера для проекта JavaScript Pure NPM будет простым.

Рабочий процесс не должен быть сложным, чтобы следовать, в сборка Работа. Заинтересованные этапы:

- name: Test
  run: |
    bazel test //...

- name: Synth
  run: |
    bazel build infra:synth
    find dist/bin/infra/cdk.out -type d -exec chmod 0755 {} \;

- name: Upload Cloud Assembly
  uses: actions/upload-artifact@v1
  with:
    name: cdk.out
    path: dist/bin/infra/cdk.out

`

При необходимости запустите все тесты в первую очередь. Правило синтезатора базеля было добавлено для вывода облачной сборки Dist/bin/infra/cdk.out через Bazel Build Infra: Synth Анкет

На данный момент CDK любит добавлять каталоги .cache ‘в каталоге cdk.out при загрузке активов в S3. Учитывая, что все выводы Bazel читаются, только сделайте документы, которые можно записать, перед загрузкой в качестве артефакта.

В diff Работа. Записка:

`

- name: Download Cloud Assembly
  uses: actions/download-artifact@v1
  with:
    name: cdk.out

- name: Run CDK diff
  run: node_modules/.bin/cdk diff -c aws-cdk:enableDiffNoFail=true --no-color --app cdk.out "*" 2>&1 | tee cdk.log

- name: Add comment to PR
  env:
    URL: ${{ github.event.pull_request.comments_url }}
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  run: |
    jq --raw-input --slurp '{body: .}' cdk.log > cdk.json
    curl \
      -H "Content-Type: application/json" \
      -H "Authorization: token $GITHUB_TOKEN" \
      -d @cdk.json \
      -X POST \
      $URL

`

JQ используется для сокращения вывода необработанного текста CDK DIFF в сообщение JSON, подходящее для загрузки в GitHub. Предположительно, существует действие GitHub, которое инкапсулирует публикацию PR -комментариев, но API остальных настолько проста, добавляя зависимость, которая кажется излишкой.

С этим рабочим процессом на месте через несколько минут дифференциал CDK должен появиться на пиар:

Также полезно настроить правило защиты от филиала GitHub, которое гарантирует, что PR -процесс успешным до слияния:

Основной рабочий процесс похож на PR, но с CDK развертывание Шаг вместо этого.

  • Сначала я столкнулся с запланированными изменениями по запросам на притяжение от Атлантида Несколько лет назад. Я считаю, что Хашикорп нанял содействия, чтобы работать над Terraform Cloud , Так что стоит проверить оба из них для вдохновения!

  • Амазонка эквивалент AWS Codebuild Бесплатный уровень — всего лишь стало 100 минут. После того, как свободные уровни заканчивают самый низкий уровень экземпляров сборки AWS (General1.small) дешевле, чем GitHub (0,005 долл. США в минуту для General1.small против 0,008 долл. США), но имеет меньше оперативной памяти (3 ГБ по сравнению с 7 ГБ). Для более крупных проектов я буду склонен к AWS (конечно, настроен через CDK!). Конструкции CodeBuild/CodePipeline и дальнейшая интеграция с течением времени с CDK/CloudFormation, вероятно, позволит построить более подробные/вовлеченные рабочие процессы.

  • Существует очень подробный RFC с некоторыми изменениями в CDK, чтобы помочь с трубопроводами:

https://github.com/aws/aws-cdk-rfcs/blob/master/text/0049-continuous-delivery.md

Оригинал: «https://dev.to/markdingram/basic-cdk-deployment-pipeline-with-github-actions-13pm»