Живая обратная связь CodePipeline в slack — с git-тегами


Введение

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

Кредиты

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

Необходимые условия

  • Настроенный AWS CLI

  • AWS SAM CLI (мы будем разворачивать наш скрипт slack-бота с помощью AWS SAM)

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

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

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

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

После клонирования репозитория в нашей директории должны быть следующие файлы

Настройка slack

Создание приложения slack

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

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


Имя приложения не имеет значения. Я выбрал «Pipeline progress». Для рабочего пространства выберите ваше рабочее пространство из выпадающего списка.

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

Теперь прокрутите вниз до scope и добавьте следующие разрешения по очереди: channels:history, channels:manage, channels:read, chat:write, chat:write.customize, chat:write.public, groups:history, groups:read, im:read, links:write, mpim:read

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

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

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

Добавление приложения в slack

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

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


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

Развертывание сценария на AWS

Примечание: Для этого шага убедитесь, что у вас установлен и настроен AWS CLI, а также SAM CLI.
Для развертывания откройте CMD в каталоге скрипта и сначала выполните команду:

, затем:

это откроет интерактивное приглашение.

Для имени стека я выбрал имя «aws-codepipeline-slack».

Для региона, если по умолчанию все в порядке, нажмите Enter, в противном случае укажите регион.

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

Для SlackChannel, если вы сохранили название канала как в сборке, то просто нажмите Enter. В противном случае укажите имя канала.

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

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

Для параметра show resource change, если выбрать y, то при каждом запуске SAM deploy он будет показывать изменения ресурсов и предлагать принять их перед развертыванием.

Для параметра SAM permissions оставьте значение по умолчанию Y.

Для параметра Disable rollback (Отключить откат) выберите в соответствии с вашим сценарием использования, он не будет иметь большого значения, если вы планируете развертывание только один раз.

Для авторизации выберите Y

Для сохранения аргументов в конфигурационном файле выберите Y. Это ускорит последующие развертывания, так как значения по умолчанию будут сохранены.

Нажмите ввод, чтобы сохранить файл конфигурации по умолчанию samconfig.toml

Нажмите Enter, чтобы сохранить конфигурационную среду по умолчанию

Этого должно быть достаточно для успешного развертывания сценария. Если вы выбрали Y для «Confirm changes before deploy», то вы получите дополнительное приглашение, подтверждающее, хотите ли вы развернуть сценарий. Выберите Y, и все готово.

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

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

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

Включение функции url

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


Вот и все! Теперь выполните те же шаги, что и выше, чтобы развернуть

и далее:

Теперь, если вы вернулись в консоль AWS и перешли к вашей лямбда-функции, вы должны найти url вашей функции в разделе configurtation -> function url.


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

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

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

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

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

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

Вторая политика даст CodeBuild разрешение на вызов лямбда-функции url. Это шаблон политики. Обязательно замените ресурс на ARN вашей лямбда-функции.

Измените buildspec.yml

Наконец, мы добавим команды в buildspec.yml для клонирования репозитория, получения git-тега и передачи git-тега в url нашей функции.
Перейдите в файл buildspec.yml и на первом этапе сборки добавьте следующие команды.

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

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

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

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

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

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

Готово!

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

Оцените статью
devanswers.ru
Добавить комментарий