Jenkins — алерт когда очередь сборок зависла
Очередь Jenkins растёт — agent отвалился, label-mismatch, или executors забиты. PR-чеки висят, дев-команда стартует слать «что с CI?» в чат.
Рецепт
#!/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-окно команды зависнет.
Похожие рецепты
Consumer не успевает обрабатывать сообщения, очередь растёт, в итоге диск переполнится. Нужен alert по количеству messages-ready в очереди.
Cron-workflow на `schedule:` иногда тихо отключается (форкнутые репо, истёкший token, GH outage). Узнаёшь через неделю по пропавшим backup'ам.
GitLab pipeline иногда зависает в running на час+ (runner потерял связь, или job висит в curl без timeout) — увидишь только когда merge request «не двигается».