На момент написания Действия 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»