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

Pingera в CI/CD

Pingera можно встроить в пайплайн развёртывания, чтобы:

  • проверять сервис сразу после релиза и останавливать пайплайн при ошибке;
  • автоматически сообщать о плановых работах на Статус Странице;
  • создавать проверки для новых сервисов вместе с их развёртыванием.

Для всех примеров понадобится API ключ. Сохраните его в секретах CI/CD под именем PINGERA_API_KEY. Пользователь, создавший ключ, должен иметь роль editor или admin.

Проверка после релиза​

Запустите существующую проверку по запросу, дождитесь результата и завершите шаг с ошибкой, если проверка не прошла. Запуск расходует кредиты так же, как регулярная проверка.

Скрипт pingera-smoke.sh (нужны curl и jq):

#!/usr/bin/env bash
set -euo pipefail

API="https://api.pingera.ru/v1"
CHECK_ID="$1"
AUTH="Authorization: ${PINGERA_API_KEY}"

job_id=$(curl -fsS -X POST -H "$AUTH" "$API/checks/$CHECK_ID/execute" | jq -r '.job_id')
echo "Запущено задание $job_id"

for _ in $(seq 1 60); do
job=$(curl -fsS -H "$AUTH" "$API/checks/jobs/$job_id")
status=$(echo "$job" | jq -r '.status')
if [[ "$status" == "completed" || "$status" == "failed" ]]; then
break
fi
sleep 5
done

echo "$job" | jq '.result'

# Один регион: result.status == "ok"; несколько регионов: нет неуспешных регионов
if echo "$job" | jq -e '.status == "completed" and (.result.status == "ok" or (.result.total_regions > 0 and .result.failed_regions == 0))' > /dev/null; then
echo "Проверка прошла"
else
echo "Проверка не прошла" >&2
exit 1
fi
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./deploy.sh
- name: Smoke test with Pingera
env:
PINGERA_API_KEY: ${{ secrets.PINGERA_API_KEY }}
run: ./scripts/pingera-smoke.sh <ID проверки>

Подробнее о заданиях и формате результата — в разделе Проверки по запросу.

Запланированные работы на время релиза​

Если релиз сопровождается простоем, сообщите о нём пользователям на Статус Странице. Создайте запланированные работы с автоматическим началом и завершением — Pingera сама переведёт компоненты в статус обслуживания и вернёт их обратно.

START=$(date -u -d '+5 minutes' +%Y-%m-%dT%H:%M:%SZ)
END=$(date -u -d '+35 minutes' +%Y-%m-%dT%H:%M:%SZ)

curl -fsS -X POST "https://api.pingera.ru/v1/pages/<ID страницы>/incidents" \
-H "Authorization: ${PINGERA_API_KEY}" \
-H "Content-Type: application/json" \
-d @- <<EOF
{
"name": "Обновление сервиса",
"body": "Выполняем плановое обновление. Возможны кратковременные перебои.",
"status": "scheduled",
"scheduled_for": "$START",
"scheduled_until": "$END",
"scheduled_auto_in_progress": true,
"scheduled_auto_completed": true,
"auto_transition_to_maintenance_state": true,
"auto_transition_to_operational_state": true,
"auto_transition_deliver_notifications_at_start": true,
"auto_transition_deliver_notifications_at_end": true,
"components": {"<ID компонента>": "under_maintenance"}
}
EOF

Время начала должно быть в будущем. Описание всех полей — в разделе Запланированные работы.

Создание проверок вместе с сервисом​

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

pip install pingera-cli
export PINGERA_API_KEY=...
pngr checks create --name "orders-api (prod)" --type web --url https://orders.example.com/health

Чтобы не создавать дубликаты при повторном запуске пайплайна, сначала найдите проверку по имени (GET /v1/checks?name=...) и создавайте её, только если она не найдена. Подробнее — в разделах Pingera CLI и API проверок.