← Tous les guides

Guide · CI/CD

Surveiller Jenkins avec un interrupteur homme mort

Un job Jenkins peut échouer sans que Jenkins ne prévienne personne : un déclencheur rate son tir, un agent passe hors ligne, un webhook n'arrive jamais. Un check-in Mortemain attrape tout cela, car il alerte sur le silence, pas seulement sur un build rouge.

1. Créez un check

Créez un check dans Mortemain avec la même période que le déclencheur de votre job (planning cron, job amont, ou webhook), avec une fenêtre de grâce assez large pour couvrir la variance normale de durée des builds. Copiez son URL de ping, elle ressemble à https://ping.mortemain.com/your-check-uuid.

2. Faites le check-in sur succès, depuis un pipeline déclaratif

Ajoutez le check-in dans le bloc post de votre Jenkinsfile pour qu'il se déclenche exactement quand le pipeline se termine, dans un sens comme dans l'autre :

 Jenkinsfile
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh './build.sh'
            }
        }
    }
    post {
        success {
            sh 'curl -fsS -m 10 https://ping.mortemain.com/your-check-uuid'
        }
        failure {
            sh 'curl -fsS -m 10 https://ping.mortemain.com/your-check-uuid/fail'
        }
    }
}

Le suffixe /fail déclenche une alerte immédiate plutôt que d'attendre que le check-in vienne à manquer, donc un build qui tourne mais sort avec un code non nul est signalé sans délai.

3. Suivez la durée du build (optionnel)

Pour mesurer la durée de chaque exécution, faites le check-in /start comme toute première étape, avant le vrai travail :

 Jenkinsfile
stages {
    stage('Notify start') {
        steps {
            sh 'curl -fsS -m 10 https://ping.mortemain.com/your-check-uuid/start'
        }
    }
    stage('Build') {
        steps {
            sh './build.sh'
        }
    }
}

Mortemain affiche alors le temps écoulé entre le ping /start et le check-in final, si bien qu'un build qui prend soudain deux fois plus de temps apparaît sans besoin d'une règle d'alerte séparée.

4. Jobs freestyle

Pas de Jenkinsfile ? Ajoutez une seule étape Execute shell qui enveloppe votre commande existante et fait le check-in en sortie, quel que soit le résultat :

 Execute shell
#!/bin/bash
curl -fsS -m 10 https://ping.mortemain.com/your-check-uuid/start

./build.sh
STATUS=$?

if [ $STATUS -eq 0 ]; then
  curl -fsS -m 10 https://ping.mortemain.com/your-check-uuid
else
  curl -fsS -m 10 https://ping.mortemain.com/your-check-uuid/fail
fi

exit $STATUS

Conserver le vrai code de sortie avec exit $STATUS permet à Jenkins de continuer à marquer le build en rouge en cas d'échec : le check-in sert uniquement à s'assurer que quelqu'un est réellement alerté.

Testez

Lancez le job une fois et vérifiez que le check passe actif dans Mortemain. Faites ensuite échouer le build volontairement et observez l'alerte immédiate de /fail arriver, puis, séparément, désactivez le déclencheur pour un cycle afin de confirmer que l'alerte de check-in manquant se déclenche après la fenêtre de grâce, exactement le mode de défaillance dont Jenkins ne vous parlera pas de lui-même.