Déclencheurs (Triggers)

Webhook — déclenchement instantané (recommandé)

Le webhook est la méthode de référence : le dépôt Git notifie Jenkins dès qu’un push a lieu.

Configuration GitHub :

GitHub repo → Settings → Webhooks → Add webhook
  ├── Payload URL : https://jenkins.example.com/github-webhook/
  ├── Content type : application/json
  └── Events : Just the push event (ou Pull requests)

Dans le Jenkinsfile :

triggers { githubPush() }

Configuration GitLab :

GitLab project → Settings → Webhooks
  └── URL : https://jenkins.example.com/project/nom-du-job

Poll SCM — fallback si webhook impossible

Jenkins interroge le dépôt à intervalles réguliers (consomme des ressources inutilement si pas de changement).

triggers { pollSCM('H/5 * * * *') }  // toutes les 5 minutes

Utiliser le H (hash) pour éviter que tous les jobs se déclenchent au même instant.


Cron — builds planifiés

Pour les builds nightly, les rapports périodiques, les tâches de maintenance :

triggers { cron('H 2 * * 1-5') }  // lundi–vendredi vers 2h
SyntaxeSignification
H/30 * * * *Toutes les 30 minutes
H H(0-7) * * *Entre minuit et 7h
H H * * 0Tous les dimanches
@midnightAlias pour la nuit
@weeklyAlias hebdomadaire

Upstream trigger — chaînage de jobs

Déclencher un job quand un autre se termine avec succès :

triggers {
    upstream(
        upstreamProjects: 'projet-a,projet-b',
        threshold: hudson.model.Result.SUCCESS
    )
}

Notifications

Slack

// Dans le post du pipeline
post {
    success {
        slackSend(
            channel: '#ci-cd',
            color: 'good',
            message: "✅ *${env.JOB_NAME}* #${env.BUILD_NUMBER} réussi\n${env.BUILD_URL}"
        )
    }
    failure {
        slackSend(
            channel: '#alerts',
            color: 'danger',
            message: "❌ *${env.JOB_NAME}* #${env.BUILD_NUMBER} échoué\n${env.BUILD_URL}"
        )
    }
    unstable {
        slackSend channel: '#ci-cd', color: 'warning',
            message: "⚠️ *${env.JOB_NAME}* — tests instables"
    }
}

Configuration requise :

Manage Jenkins → Configure System → Slack
  ├── Workspace   : monorg
  └── Credential  : slack-token (type Secret Text)

Email (Email Extension Plugin)

post {
    failure {
        emailext(
            to: 'team@example.com,${DEFAULT_RECIPIENTS}',
            subject: "ÉCHEC: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
            body: '''
                <p>Le build <b>${env.JOB_NAME} #${env.BUILD_NUMBER}</b> a échoué.</p>
                <p>Consulter les logs : <a href="${env.BUILD_URL}">${env.BUILD_URL}</a></p>
                ${BUILD_LOG, maxLines=50, escapeHtml=true}
            ''',
            mimeType: 'text/html'
        )
    }
}

Webhook HTTP générique

Pour notifier n’importe quel service (PagerDuty, Opsgenie, webhook custom) :

post {
    failure {
        httpRequest(
            url: 'https://events.pagerduty.com/v2/enqueue',
            httpMode: 'POST',
            contentType: 'APPLICATION_JSON',
            requestBody: """
                {
                  "routing_key": "${PAGERDUTY_KEY}",
                  "event_action": "trigger",
                  "payload": {
                    "summary": "Build échoué: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                    "severity": "error"
                  }
                }
            """
        )
    }
}

Bonnes pratiques

PratiqueRaison
Préférer le webhook au poll SCMInstantané et moins coûteux en ressources
Notifier uniquement sur changement d’étatwhen { expression { currentBuild.previousBuild?.result != 'FAILURE' } } pour ne pas spammer
Canaux distincts#ci-cd pour les succès, #alerts pour les failures
Inclure le lien directToujours mettre ${env.BUILD_URL} dans la notification

En relation avec