Skip to content
Exlogare

CircleCI ingest

Отправка логов CircleCI в Exlogare через шаг с when on_fail.

POST /api/ingest/circleci принимает лог упавшего job и возвращает RCA. Интеграция — один when: on_fail шаг внутри любого job.

Обязательные поля

ПолеТипЗаметки
project_slugstringНапример gh/myorg/myrepo.
workflow_idstringCIRCLE_WORKFLOW_ID (UUID).
job_namestringCIRCLE_JOB.
job_numberintCIRCLE_BUILD_NUM.
statusstringfailed / error / и т.д.
logstringЛог упавшего шага, до 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, чтобы один токен работал во всех репозиториях.