Введение

Это руководство предназначено для вас, если вы когда-либо хотели получать живые отзывы о том, как продвигаются ваши конвейеры на AWS. Кроме того, если вы следите за версией своего приложения в тегах git, я также покажу вам, как получить их в CodeBuild и, в качестве бонуса, как отправить их в виде сообщений Slack.


Кредиты

В то время как математики и физики стоят на плечах гигантов, инженеры-программисты стоят на плечах других инженеров-программистов. Это руководство было бы невозможно без Чарльз Уэсли вклад, так как он сделал сценарий для слабого бота. Что касается того, как получить теги git из CodeBuild, это также было бы невозможно без вклада Тимоти Джонс который написал для этого фантастический сценарий.


Предварительные требования

  • Настроенный интерфейс командной строки AWS

  • Интерфейс командной строки AWS SAM (мы будем развертывать скрипт нашего слабого бота с помощью AWS SAM)

  • Работающий AWS CodePipeline (включая CodeCommit, CodeBuild и CodeDeploy)

  • Достаточные учетные данные для пользователя AWS


Клонирование слабого скрипта бота

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

После клонирования репо у нас должны быть эти файлы внутри нашего каталога.
│ .gitignore
│ build.gif
│ LICENSE
│ Pipfile
│ README.md
│ template.yml

└───src
.pylintrc
build_info.py
message_builder.py
notifier.py
requirements.txt
slack_helper.py


Настройка резерва


Создание слабого приложения

Сначала нам нужно создать слабое приложение. Для этого направляйтесь к https://api.slack.com/apps.
Нажмите «Создать новое приложение».

Описание изображения

Нажмите «С нуля».

Описание изображения
Для имени приложения это не имеет значения. Я выбрал «Конвейерный прогресс». Для рабочей области выберите рабочую область из раскрывающегося списка.

Описание изображения

После создания приложения на боковой панели перейдите в раздел OAuth и разрешения.

Описание изображения

Теперь прокрутите вниз до области и добавьте следующие разрешения один за другим: каналы: история, каналы: управление, каналы: чтение, чат: запись, чат: запись. настроить, чат: запись. общедоступный, группы: история, группы: чтение, im: чтение, ссылки: запись, mpim: чтение

Описание изображения

Теперь прокрутите страницу вверх и сгенерируйте токен OAuth пользователя бота.

Примечание: запишите токен OAuth, так как он нам скоро понадобится.

Описание изображения

Наконец, нажмите кнопку : установите приложение на свое рабочее место. Так будет выглядеть кнопка после успешной установки.

Описание изображения


Добавить приложение в слабину

Перейдите в slack и создайте новый канал под названием builds. Это имя канала по умолчанию, которое принимает сценарий. Если вы назовете свой канал как-то иначе, позже я покажу вам, где это указать.

Внутри канала сборки в диалоговом окне нажмите /.
Это открывает окно поиска. Найдите приложения и нажмите «Добавить приложения на этот канал».

Описание изображения
На следующей странице найдите свое приложение по названию и добавьте его на канал. В моем случае это называется Pipeline progress.
Вот как это должно выглядеть после добавления на канал.

Описание изображения


Развертывание скрипта на AWS

Примечание. Для этого шага убедитесь, что у вас установлен и настроен интерфейс командной строки AWS, а также интерфейс командной строки SAM.
Для развертывания откройте CMD в каталоге сценария и сначала запустите:
sam build
с последующим:
sam deploy --guided
это откроет интерактивную подсказку.

В качестве имени стека я решил назвать его «aws-codepipeline-slack».
Stack Name [sam-app]: aws-codepipeline-slack

Для региона, если по умолчанию все в порядке, нажмите Enter, иначе укажите регион.
AWS Region [eu-west-1]:

Для SlackBotUserOAuthAccessToken вставьте токен OAuth, который мы создали на предыдущем шаге. Обратите внимание, что это скрытое поле, то есть то, что вы вставите, не будет отображаться на экране.
Parameter SlackBotUserOAuthAccessToken:

Для SlackChannel, если вы сохранили имя канала как build, просто нажмите Enter. В противном случае укажите имя канала
Parameter SlackChannel [builds]:

Для SlackBotName это имя бота, который будет отправлять обновления конвейера. Я оставил его по умолчанию и нажал Enter.
Parameter SlackBotName [PipelineBuildBot]:

Для SlackBotIcon это значок бота, который будет отправлять обновления конвейера. Я оставил его по умолчанию и нажал Enter.
Parameter SlackBotIcon [:robot_face:]:

Для отображения изменения ресурсов, если вы выберете y, он покажет вам изменения ресурсов и предложит вам принять их перед развертыванием при каждом запуске развертывания SAM.
#Shows you resources changes to be deployed and require a 'Y' to initiate deploy
Confirm changes before deploy [y/N]:

Для разрешений SAM оставьте значение по умолчанию Y.
#SAM needs permission to be able to create roles to connect to the resources in your template
Allow SAM CLI IAM role creation [Y/n]:

Для отключения отката выберите в соответствии с вашим вариантом использования, это не будет иметь большого значения, если вы планируете развертывание только один раз.
#Preserves the state of previously provisioned resources when an operation fails
Disable rollback [y/N]:

Для авторизации выберите Y
Notifier Function Url may not have authorization defined, Is this okay? [y/N]: Y

Для сохранения аргументов в файл конфигурации выберите Y. Это ускорит будущие развертывания, поскольку сохраняются значения по умолчанию.
Save arguments to configuration file [Y/n]: Y

Нажмите Enter, чтобы сохранить файл конфигурации по умолчанию как samconfig.toml.
SAM configuration file [samconfig.toml]:

Нажмите Enter, чтобы сохранить среду конфигурации по умолчанию.
SAM configuration environment [default]:

Этого должно быть достаточно для успешного развертывания скрипта. Если вы выбрали Y для «Подтвердить изменения перед развертыванием», вы получите дополнительный запрос на подтверждение того, хотите ли вы выполнить развертывание. Выберите Y на нем, и все готово.

С этим мы закончили! теперь вы можете получать обновления о состоянии ваших конвейеров.
Вы можете проверить свою новую лямбда-функцию, если войдете в консоль AWS и перейдете к лямбда-функции.

Описание изображения


Добавление поддержки тегов git

Если вам случится отслеживать версию своего приложения с помощью тегов git, и вы также хотите получать уведомления о версии, которая развертывается в slack. Тогда, пожалуйста, прочитайте и выполните следующие шаги.
Нам нужно включить URL-адрес функции в нашей недавно развернутой лямбда-функции, чтобы мы могли вызывать функцию из CodeBuild и передавать ей тег git. Нам также потребуется добавить некоторые разрешения для роли службы CodeBuild. Наконец, нам нужно добавить скрипт bash в наш репозиторий CodeCommit, который позволит CodeBuild клонировать репозиторий и извлекать из него тег git. Если вы хотите узнать больше о том, почему нам нужно использовать этот обходной путь, а не просто извлекать теги git из нашего репозитория CodeCommit, я настоятельно рекомендую прочитать Статья Тимоти Джонсачеловек, стоящий за сценарием bash, который мы будем использовать.


URL-адрес включения функции

Чтобы включить URL-адрес функции в нашем слабом скрипте. Откройте код функции локально в вашей любимой среде IDE. Перейдите к template.yml и раскомментируйте эти две строки. (строки 28 и 29).

Описание изображения
Вот и все! Теперь выполните те же шаги, что и выше, чтобы развернуть
sam build
с последующим:
sam deploy --guided
Теперь, если вы вернетесь к своей консоли AWS и перейдете к своей лямбда-функции, вы сможете найти URL-адрес своей функции в разделе configurtation -> URL-адрес функции.

Описание изображения
Примечание: запишите URL-адрес вашей функции, так как он понадобится нам на следующем шаге.


добавление скрипта bash в CodeCommit

как объяснено, мы будем использовать сценарий bash в CodeBuild, чтобы помочь нам получить тег git.
Добавлять этот файл в базовый каталог репозитория CodeCommit. Убедитесь, что имя файла: codebuild-git-wrapper.sh


Добавление необходимых разрешений в CodeBuild

Вам нужно будет добавить 2 политики к вашей сервисной роли CodeBuild.
Первый позволит CodeBuild выполнять git pull в репозитории CodeCommit. Это шаблон политики. Обязательно добавьте свой репозиторий ARN в разделе Ресурс..

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "codecommit:GitPull",
"Resource": "YOUR_REPO_ARN"
}
]}

Вторая политика даст CodeBuild разрешение на вызов URL-адреса лямбда-функции. Это шаблон политики. Обязательно замените ресурс своей лямбда-функцией ARN..
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "lambda:InvokeFunctionUrl",
"Resource": "YOUR_FUNCTION_ARN"
}
]}


Измените свой buildspec.yml

Наконец, мы добавим команды в buildspec.yml для клонирования репозитория, извлечения тега git и передачи тега git в URL-адрес нашей функции.
Перейдите к файлу buildspec.yml и на первом этапе этапа сборки добавьте следующие команды.
build:
commands:
- echo get version
- /bin/bash codebuild-git-wrapper.sh YOUR_REPO_URL YOUR_BRANCH_NAME
#get release version from git tag
- RELEASE_VERSION=$(git tag --points-at HEAD)
#send git version to slack
- curl YOUR_FUNCTION_URL/?git-tag=$RELEASE_VERSION -o /dev/null

Не забудьте изменить следующие поля:

  • YOUR_REPO_URL: URL репозитория фиксации вашего кода. Вы можете получить это, перейдя в CodeCommit и щелкнув HTTPS в разделе Clone URL.

Описание изображения

  • YOUR_BRANCH_NAME: имя ветки, в которой запускается CodePipeline. Обычно это должно быть: main. но проверьте конфигурацию вашего конвейера, чтобы быть уверенным.

  • YOUR_FUNCTION_URL: URL-адрес лямбда-функции, который мы создали и приняли к сведению на предыдущем шаге.


Соображения безопасности

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


Сделанный!

Поздравляем! Теперь у вас есть слабый бот, который будет информировать вас о состоянии ваших конвейеров CodePipeline. И если вы выполнили дополнительные шаги, он также отправит вам сообщение о вашей версии выпуска через теги git.

Описание изображения

Описание изображения