Перейти к содержимому

Уведомления о результате CI/CD

Депешер может сообщать команде об успехе или ошибке этапа CI/CD. Сборочный процесс отправляет POST-запрос на входящий канал, а получатели задаются в личном кабинете: Email, Telegram, группа Telegram или Пачка.

Ниже — скрипт для runner с Bash и curl. Его можно вызвать как команду этапа в вашей системе CI/CD.

Подготовьте канал и переменные

  1. Создайте и подтвердите нужные исходящие каналы.
  2. Создайте входящий канал для сборок и свяжите его с выбранными получателями.
  3. В настройках CI сохраните его URL как переменную DEPESHER_URL.
  4. Если включена защита входящего канала, сохраните токен как секрет DEPESHER_TOKEN. Для канала без защиты переменную можно не задавать.

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

Отправьте результат этапа

Замените ./deploy.sh реальной командой своего этапа. В этом примере уведомление относится именно к этой команде, а не ко всему pipeline:

bash
#!/usr/bin/env bash

if ./deploy.sh; then
  stage_status=0
  notification="CI/CD: развёртывание завершено успешно"
else
  stage_status=$?
  notification="CI/CD: ошибка развёртывания, код $stage_status"
fi

headers=(--header 'Content-Type: text/plain')

if [ -n "${DEPESHER_TOKEN:-}" ]; then
  headers+=(--header "Authorization: Bearer $DEPESHER_TOKEN")
fi

if ! curl \
  --fail \
  --silent \
  --show-error \
  --max-time 15 \
  --output /dev/null \
  --request POST \
  "${headers[@]}" \
  --data-binary "$notification" \
  "$DEPESHER_URL"; then
  printf '%s\n' 'Не удалось отправить результат этапа в Депешер' >&2
fi

exit "$stage_status"

Код основной команды сохраняется до HTTP-запроса. Поэтому неуспешное развёртывание останется неуспешным для CI, а ошибка уведомления попадёт в журнал отдельно. Опция --fail позволяет обнаружить HTTP-ошибку при отправке.

Добавьте контекст сборки

В текст полезно включить проект, окружение, версию и ссылку на запуск. Имена соответствующих переменных отличаются у CI-систем — подставьте переменные своего runner. Для единообразного оформления можно передавать JSON и использовать шаблон Депешера.

Как проверить

Запустите тестовый этап с командами true и false вместо развёртывания. Проверьте текст уведомления, историю канала и статус этапа в CI.

Скрипт отправляет сообщение, когда управление доходит до HTTP-запроса. При принудительной остановке runner или потере машины он может не выполниться. Для отмен и результата всего pipeline настройте отдельный завершающий этап средствами своей CI-системы.

Если запрос выполнен, но уведомления нет, откройте диагностику доставки.