Jenkins ingest
Отправка логов Jenkins в Exlogare из declarative pipeline, scripted pipeline или freestyle post-build скрипта.
POST /api/ingest/jenkins принимает консольный лог упавшей Jenkins-сборки и возвращает RCA. Ниже — copy-paste интеграции для всех типов pipeline.
Обязательные поля
| Поле | Тип | Заметки |
|---|---|---|
job | string | Имя джоба (backend-tests). |
build_number | int | BUILD_NUMBER. |
status | string | SUCCESS, FAILURE, UNSTABLE, ABORTED, NOT_BUILT. |
log | string | Полный консольный лог. До 10 МиБ. |
project | string (опционально) | Группа / репозиторий для группировки в дашборде. |
build_url | URL (опционально) | Прямая ссылка на страницу сборки в Jenkins. |
Declarative pipeline
pipeline {
agent any
stages {
stage('Test') {
steps { sh 'make test 2>&1 | tee build.log; exit ${PIPESTATUS[0]}' }
}
}
post {
failure {
sh '''
curl -fsS -X POST https://api.exlogare.net/api/ingest/jenkins \
-H "Authorization: Bearer ${EXLOGARE_TOKEN}" \
-H "Content-Type: application/json" \
--data-binary @- <<JSON
{
"job": "${JOB_NAME}",
"build_number": ${BUILD_NUMBER},
"status": "FAILURE",
"project": "${JOB_BASE_NAME}",
"build_url": "${BUILD_URL}",
"log": $(jq -Rs . build.log)
}
JSON
'''
}
}
}
EXLOGARE_TOKEN храните в Jenkins Credentials → secret text и пробрасывайте через withCredentials.
Scripted pipeline
node {
try {
sh 'make test 2>&1 | tee build.log; exit ${PIPESTATUS[0]}'
} catch (err) {
sh """
curl -fsS -X POST https://api.exlogare.net/api/ingest/jenkins \
-H "Authorization: Bearer \${EXLOGARE_TOKEN}" \
-H "Content-Type: application/json" \
-d "\$(jq -n \\
--arg job '\${env.JOB_NAME}' \\
--arg url '\${env.BUILD_URL}' \\
--arg log "\$(cat build.log)" \\
'{job:\$job, build_number:\${env.BUILD_NUMBER}, status:"FAILURE", build_url:\$url, log:\$log}')"
"""
throw err
}
}
Freestyle build (post-build “Execute shell”)
Для freestyle-джоб используйте Post-build Actions → Execute shell on build с условием “Run only when build succeeds or fails”, выставленным в “Failure”:
#!/usr/bin/env bash
set -euo pipefail
LOG_PATH="$WORKSPACE/build.log"
curl -fsS -X POST https://api.exlogare.net/api/ingest/jenkins \
-H "Authorization: Bearer $EXLOGARE_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n \
--arg job "$JOB_NAME" \
--arg url "$BUILD_URL" \
--arg log "$(cat "$LOG_PATH")" \
'{job:$job, build_number:'$BUILD_NUMBER', status:"FAILURE", build_url:$url, log:$log}')"
Подводные камни
jq -Rs .— самый надёжный способ заэкранировать произвольный лог в JSON-строку (newlines, кавычки, бэкслеши).- Эндпоинт ждёт
logкак JSON-строку, не multipart upload. Если в CI нетjq, формируйте JSON в скрипте и отправляйте через--data-binary @file.json. - Логи > 10 МиБ отбрасываются с
413— обрезайтеtail -c 9MB build.logесли действительно нужен большой лог.