Drone CI / Woodpecker ingest
Отправка логов Drone или Woodpecker в Exlogare через шаг при падении.
POST /api/ingest/drone работает и для Drone CI, и для Woodpecker CI — у них одинаковый контракт env-переменных.
Обязательные поля
| Поле | Тип | Заметки |
|---|---|---|
repo | string | org/repo (DRONE_REPO). |
build_number | int | DRONE_BUILD_NUMBER. |
status | string | failure / success / error / killed. |
log | string | Лог упавшего шага, до 10 МиБ. |
pipeline, step, branch, commit_sha, build_url | опционально |
Drone CI
kind: pipeline
type: docker
name: ci
steps:
- name: test
image: golang:1.22
commands:
- go test ./... 2>&1 | tee /drone/src/build.log
- exit ${PIPESTATUS[0]}
- name: send-failure-log
image: alpine
when:
status: [ failure ]
environment:
EXLOGARE_TOKEN:
from_secret: exlogare_token
commands:
- apk add --no-cache curl jq
- |
curl -fsS -X POST https://api.exlogare.net/api/ingest/drone \
-H "Authorization: Bearer $EXLOGARE_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n \
--arg repo "$DRONE_REPO" \
--arg br "$DRONE_BRANCH" \
--arg sha "$DRONE_COMMIT" \
--arg url "$DRONE_BUILD_LINK" \
--arg log "$(cat /drone/src/build.log)" \
'{repo:$repo, build_number:'$DRONE_BUILD_NUMBER', status:"failure", branch:$br, commit_sha:$sha, build_url:$url, log:$log}')"
Woodpecker CI
Форма та же, замените DRONE_* на CI_*:
steps:
send-failure-log:
image: alpine
when:
status: [ failure ]
environment:
EXLOGARE_TOKEN:
from_secret: exlogare_token
commands:
- apk add --no-cache curl jq
- |
curl -fsS -X POST https://api.exlogare.net/api/ingest/drone \
-H "Authorization: Bearer $EXLOGARE_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n \
--arg repo "$CI_REPO" \
--arg br "$CI_COMMIT_BRANCH" \
--arg sha "$CI_COMMIT_SHA" \
--arg url "$CI_PIPELINE_URL" \
--arg log "$(cat build.log)" \
'{repo:$repo, build_number:'$CI_PIPELINE_NUMBER', status:"failure", branch:$br, commit_sha:$sha, build_url:$url, log:$log}')"
Советы
- Лог из предыдущего шага захватывайте
tee build.log— Drone/Woodpecker не дают runtime-вызова “дай лог предыдущего шага”. - Используйте секрет-менеджер движка (
from_secret) — чтобы токен не попал в git-историю YAML.