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 minutesUtiliser 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| Syntaxe | Signification |
|---|---|
H/30 * * * * | Toutes les 30 minutes |
H H(0-7) * * * | Entre minuit et 7h |
H H * * 0 | Tous les dimanches |
@midnight | Alias pour la nuit |
@weekly | Alias 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
| Pratique | Raison |
|---|---|
| Préférer le webhook au poll SCM | Instantané et moins coûteux en ressources |
| Notifier uniquement sur changement d’état | when { expression { currentBuild.previousBuild?.result != 'FAILURE' } } pour ne pas spammer |
| Canaux distincts | #ci-cd pour les succès, #alerts pour les failures |
| Inclure le lien direct | Toujours mettre ${env.BUILD_URL} dans la notification |
En relation avec
- Administration — Vue d’ensemble — hub administration
- Directives essentielles —
triggersdans le Jenkinsfile - Plugins essentiels — Slack, Email Extension, HTTP Request