CircleCI ingest
Отправка логов CircleCI в Exlogare через шаг с when on_fail.
POST /api/ingest/circleci принимает лог упавшего job и возвращает RCA. Интеграция — один when: on_fail шаг внутри любого job.
Обязательные поля
| Поле | Тип | Заметки |
|---|---|---|
project_slug | string | Например gh/myorg/myrepo. |
workflow_id | string | CIRCLE_WORKFLOW_ID (UUID). |
job_name | string | CIRCLE_JOB. |
job_number | int | CIRCLE_BUILD_NUM. |
status | string | failed / error / и т.д. |
log | string | Лог упавшего шага, до 10 МиБ. |
branch, commit_sha, pipeline_url, workflow_name | опционально |
Шаг job
Заведите CircleCI Context exlogare с EXLOGARE_TOKEN и добавьте on-fail шаг:
version: 2.1
jobs:
test:
docker:
- image: cimg/python:3.12
steps:
- checkout
- run:
name: Run tests
command: |
set -o pipefail
pytest -q 2>&1 | tee /tmp/build.log
- run:
name: Send failure log to Exlogare
when: on_fail
command: |
sudo apt-get update && sudo apt-get install -y jq
curl -fsS -X POST https://api.exlogare.net/api/ingest/circleci \
-H "Authorization: Bearer $EXLOGARE_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n \
--arg ps "gh/$CIRCLE_PROJECT_USERNAME/$CIRCLE_PROJECT_REPONAME" \
--arg wf "$CIRCLE_WORKFLOW_ID" \
--arg job "$CIRCLE_JOB" \
--arg br "$CIRCLE_BRANCH" \
--arg sha "$CIRCLE_SHA1" \
--arg url "$CIRCLE_BUILD_URL" \
--arg log "$(cat /tmp/build.log)" \
'{project_slug:$ps, workflow_id:$wf, job_name:$job, job_number:'$CIRCLE_BUILD_NUM', status:"failed", branch:$br, commit_sha:$sha, pipeline_url:$url, log:$log}')"
workflows:
ci:
jobs:
- test:
context: exlogare
Для CircleCI Server форма та же — подставьте корректный публичный hostname.
Советы
- Закэшируйте
jqв Docker-образе, чтобы не ставить его на каждом ране. - Если суит большой — обрезайте лог:
tail -c 9000000 /tmp/build.logпередjq. - Используйте CircleCI context вместо per-project env vars, чтобы один токен работал во всех репозиториях.