Деплои

Летопись ваших выкладок: каждый деплой, о котором сообщает CI, появляется вертикальным маркером на графиках проекта, в отдельном списке и рядом с регрессиями, которые за ним последовали, — так «что изменилось прямо перед сбоем» становится ссылкой, а не догадкой.

Что это даёт

  • Маркеры на графиках. Каждый деплой рисует пунктирную вертикальную линию в момент выкладки на графиках производительности, метрик, хостов и аптайма, с подписью версии. Всплеск задержек, совпавший с релизом, виден сразу.
  • Список деплоев. Подраздел «Деплои» области «Производительность» перечисляет все сообщённые выкладки, новые сверху: версия, окружение, когда, changelog и ссылка обратно на CI-раннер или страницу релиза.
  • Привязка регрессий. В списке регрессий регрессия, начавшаяся в течение 7 дней после деплоя, получает пометку «после деплоя vX» — наиболее вероятное изменение-виновник, в одном клике от списка деплоев.

Для работы остального продукта ничего не требуется: если CI о деплоях не сообщает, маркеров просто нет, а список пуст.

Как пушить деплой из CI

Сообщите о деплое одним HTTP-запросом в конце job’а выкладки.

POST https://<адрес-gotcha>/api/<PROJECT_ID>/deployments/

Аутентификация

Как и эндпойнт приёма событий, этот путь авторизуется ключом DSN проекта — публичным ключом (<PUBLIC_KEY>, часть DSN между https:// и @) плюс идентификатором проекта (<PROJECT_ID>, последний сегмент DSN). Где взять DSN — см. SDK и интеграции.

Ключ передаётся либо query-параметром:

POST https://<адрес-gotcha>/api/<PROJECT_ID>/deployments/?sentry_key=<PUBLIC_KEY>

либо заголовком протокола Sentry:

X-Sentry-Auth: Sentry sentry_key=<PUBLIC_KEY>

Отсутствующий ключ — ответ 401; ключ, не принадлежащий <PROJECT_ID>, — 403.

Тело запроса

Один JSON-объект, описывающий один деплой:

ПолеОбязательностьОписание
versionобязательноИдентификатор релиза (v1.4.2, git SHA, номер сборки). Пустое или отсутствующее значение — ответ 400.
environmentопциональноОкружение, куда ушёл релиз (prod, staging, …). Помогает отличать релизы разных окружений.
deployed_atопциональноКогда произошла выкладка — RFC3339-строка ("2026-08-18T12:00:00Z") либо unix-время в секундах числом. Отсутствует, пусто или не разобрано — берётся время приёма сервером.
urlопциональноСсылка обратно на CI-раннер или страницу релиза. В списке рендерится внешней ссылкой (ссылкой становится только http/https, иначе — обычный текст).
changelogопциональноПроизвольный текст изменений. В списке показывается с сохранением переносов строк.

Ответ при успехе — 200 OK с телом {"id": <n>}, идентификатором сохранённой записи.

GitHub Actions

Шаг в конце job’а выкладки — части DSN лежат в секретах репозитория:

- name: Notify Gotcha of the deployment
  run: |
    curl -sf -X POST \
      "https://gotcha.example.com/api/${{ secrets.GOTCHA_PROJECT_ID }}/deployments/?sentry_key=${{ secrets.GOTCHA_PUBLIC_KEY }}" \
      -H "Content-Type: application/json" \
      -d "$(jq -n \
        --arg v "${{ github.ref_name }}" \
        --arg url "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" \
        --arg log "${{ github.event.head_commit.message }}" \
        '{version:$v, environment:"prod", url:$url, changelog:$log}')"

GitLab CI

Job в стадии deploy файла .gitlab-ci.ymlGOTCHA_PROJECT_ID и GOTCHA_PUBLIC_KEY заданы переменными CI/CD:

notify-gotcha:
  stage: deploy
  needs: [deploy]
  script:
    - |
      curl -sf -X POST \
        "https://gotcha.example.com/api/${GOTCHA_PROJECT_ID}/deployments/?sentry_key=${GOTCHA_PUBLIC_KEY}" \
        -H "Content-Type: application/json" \
        -d "{\"version\":\"${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA}\",\"environment\":\"prod\",\"url\":\"${CI_PIPELINE_URL}\",\"changelog\":\"${CI_COMMIT_TITLE}\"}"

Где видны маркеры

Маркеры с подписью версии рисуются на каждом временном графике проекта: графиках эндпойнтов Производительности, пользовательских графиках метрик, графиках ресурсов хостов и графиках задержек аптайма. Маркер ставится в момент деплоя по собственной оси времени графика; деплои вне видимого окна графика не рисуются.

Экран списка деплоев

/projects/{id}/deployments (пункт «Деплои» в навигации «Производительность») перечисляет сообщённые деплои проекта, новые сверху. В каждой строке — версия, окружение, когда произошло (относительное время), changelog с сохранёнными переносами и — если был передан url — ссылка на CI-раннер или страницу релиза. У пустого проекта показывается пустое состояние с этой инструкцией.

Привязка регрессий

Список регрессий связывает каждую обнаруженную регрессию с наиболее вероятным виновником — ближайшим деплоем, который произошёл до начала регрессии, в пределах окна в 7 дней. Такая строка получает пометку «после деплоя vX» со ссылкой на список деплоев. Регрессия без деплоя в окне остаётся без пометки — привязка аддитивна и никак не меняет то, как сами регрессии обнаруживаются.