Skip to content
Exlogare

Jenkins ingest

Отправка логов Jenkins в Exlogare из declarative pipeline, scripted pipeline или freestyle post-build скрипта.

POST /api/ingest/jenkins принимает консольный лог упавшей Jenkins-сборки и возвращает RCA. Ниже — copy-paste интеграции для всех типов pipeline.

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

ПолеТипЗаметки
jobstringИмя джоба (backend-tests).
build_numberintBUILD_NUMBER.
statusstringSUCCESS, FAILURE, UNSTABLE, ABORTED, NOT_BUILT.
logstringПолный консольный лог. До 10 МиБ.
projectstring (опционально)Группа / репозиторий для группировки в дашборде.
build_urlURL (опционально)Прямая ссылка на страницу сборки в 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 если действительно нужен большой лог.