Skip to content

Jenkins — алерт когда очередь сборок зависла

Очередь Jenkins растёт — agent отвалился, label-mismatch, или executors забиты. PR-чеки висят, дев-команда стартует слать «что с CI?» в чат.

Рецепт

bash
#!/usr/bin/env bash
# /etc/cron.d/jenkins-queue
# */5 * * * * root /opt/jenkins-queue.sh

JENKINS=${JENKINS_URL:-http://jenkins:8080}
USER=${JENKINS_USER}
TOKEN=${JENKINS_TOKEN}
THRESH=${THRESH:-5}                   # queued jobs > N
MAX_AGE_MIN=${MAX_AGE_MIN:-15}        # any job stuck > N min

QUEUE=$(curl -fsS -u "$USER:$TOKEN" "$JENKINS/queue/api/json" \
  | jq '.items')

COUNT=$(echo "$QUEUE" | jq 'length')
NOW=$(date -u +%s)

OLD=$(echo "$QUEUE" | jq --argjson now "$NOW" --argjson max "$MAX_AGE_MIN" '
  [.[] | select((($now * 1000 - .inQueueSince) / 60000) > $max)] | length')

if [ "$COUNT" -gt "$THRESH" ] || [ "$OLD" -gt 0 ]; then
  curl -fsS "$HEARTBEAT_URL" --data "queued=$COUNT,old=$OLD,window=${MAX_AGE_MIN}m"
  exit 2
fi
echo "OK (queued=$COUNT, none > ${MAX_AGE_MIN}m)"

То же самое в Enterno.io

Поставьте Enterno heartbeat на 5 мин — узнаете о застрявшем agent-е раньше, чем merge-окно команды зависнет.

Настроить API monitor → ← Все рецепты

Похожие рецепты

Consumer не успевает обрабатывать сообщения, очередь растёт, в итоге диск переполнится. Нужен alert по количеству messages-ready в очереди.