« Un job Jenkins = une branche. Pour tester une autre branche, je recrée un job. »
Ça ne passe pas à l’échelle : un projet réel a des dizaines de branches qui vont et viennent. Créer et supprimer un job à la main pour chacune est intenable. Le pipeline multibranch résout ça : il découvre les branches du dépôt et applique le Jenkinsfile à chacune, automatiquement.
À la fin de ce module, tu sauras…
- Expliquer ce qu’apporte un pipeline multibranch face à un pipeline simple
- Créer un job Multibranch Pipeline sur ton dépôt
- Configurer la découverte périodique des branches (scan)
- Adapter le pipeline pour ne déployer que depuis main
01Le problème du job mono-branche
soria-web-ci ne regarde que main. Crée une branche feature/x, pousse-la : rien ne se passe. Jenkins ne la connaît pas.Comprends ce que multibranch change
Un Multibranch Pipeline traite le dépôt entier, pas une branche : il scanne les branches, crée automatiquement un sous-job par branche contenant un Jenkinsfile, et le supprime quand la branche disparaît. Tu ne gères plus des jobs, tu gères un dépôt — Jenkins s’occupe des branches. Concept universel : GitLab CI et GitHub Actions appliquent aussi le pipeline à toutes les branches par nature.
02Créer le job Multibranch
Un job qui suit tout le dépôt
Jenkins → New Item :
- Name :
soria-web-multibranch· Type : Multibranch Pipeline - Branch Sources → Add source → Git
- Repository URL :
git@github.com:ton-compte/soria-web.git - Credentials :
github-soria-ssh(module 6.1) - Build Configuration → Mode : by Jenkinsfile · Script Path :
Jenkinsfile
Sauvegarde. Jenkins lance un premier scan du dépôt.
ObserveScanned repository ...
Checking branch main
'Jenkinsfile' found -> job created
1 branches were processedmain, trouvé le Jenkinsfile, et créé un sous-job automatiquement. Chaque branche avec un Jenkinsfile aura le sien.Comprends « by Jenkinsfile »
Le mode « by Jenkinsfile » dit à Jenkins : ne construis une branche que si elle contient un Jenkinsfile. C’est cohérent avec le pipeline-as-code : la définition du build voyage avec la branche. Une branche sans Jenkinsfile est simplement ignorée.
03Le scan périodique
Découvrir les branches régulièrement
Le webhook prévient Jenkins des push, mais le scan sert à découvrir les branches nouvelles ou supprimées. Dans soria-web-multibranch → Configure → Scan Repository Triggers :
[x] Periodically if not otherwise run
Interval : 1 minuteComprends scan vs build, et le « if not otherwise run »
Deux mécanismes distincts : le scan découvre les branches (structure du dépôt) ; le build exécute le pipeline sur une branche (déclenché par le webhook ou le scan). « If not otherwise run » évite le doublon : si un webhook a déjà déclenché l’activité, le scan périodique ne refait pas le travail. C’est un filet de sécurité pour ne rater aucune branche, même sans webhook fiable.
04Prouver la découverte automatique
Une nouvelle branche, prise en charge seule
Manipulecd ~/soria-web
git checkout -b feature/banniere
sed -i 's/<\/h1>/ - promo<\/h1>/' index.html
git commit -am "Test bannière promo"
git push -u origin feature/banniereAttends au plus une minute (ou déclenche Scan Repository Now), puis regarde la vue du job multibranch.
ObserveBranches (2)
main #4 OK
feature/banniere #1 OK <- apparue et construite toute seulefeature/banniere a été découverte, et construite sans que tu crées de job. Supprime la branche sur GitHub : au scan suivant, son sous-job disparaît. Le cycle de vie des branches est géré tout seul.Comprends pourquoi c’est puissant en équipe
Chaque développeur pousse sa branche et obtient un build automatique — feedback immédiat, avant même de fusionner. C’est la base du travail d’équipe que ton projet vise (interconnexion, dev collaboratif) : les branches sont testées en continu, sans configuration manuelle par branche.
05Ne déployer que depuis main
Construire partout, déployer avec discernement
main. Encadre le stage Deploy par une condition :stage('Deploy (Helm)') {
when { branch 'main' }
steps {
withCredentials([file(credentialsId: 'kubeconfig-soria', variable: 'KUBECONFIG_FILE')]) {
sh '''
set -eu
export KUBECONFIG="$KUBECONFIG_FILE"
helm upgrade --install soria-web ./soria-web \\
-n lab-soria --set image.repository="$IMAGE_REPO" --set image.tag="$IMAGE_TAG"
'''
}
}
}main exécute le Deploy. Sécurité et bon sens.Comprends when { branch }, un garde-fou universel
La condition when { branch ‘main’ } rend un stage conditionnel à la branche. C’est un pattern standard : CI partout, CD seulement depuis la branche de production. Le même besoin existe dans tout outil (règles only/rules en GitLab CI, conditions if en GitHub Actions). Tu construis une culture, pas une syntaxe Jenkins.
✓Ce que tu retiens
Un pipeline multibranch gère un dépôt, pas une branche : il scanne et découvre les branches (périodiquement, « if not otherwise run »), applique le Jenkinsfile à chacune, et nettoie les branches disparues. On construit partout, mais on déploie seulement depuis main (when { branch ‘main’ }). Le CI/CD est désormais complet et adapté au travail d’équipe.
Un CI/CD prêt pour l’équipe
À faire
- Crée le job
soria-web-multibranchsur ton dépôt. - Active le scan périodique (Periodically if not otherwise run, 1 minute).
- Pousse une branche
feature/…et prouve sa découverte + build automatiques. - Ajoute
when { branch ‘main’ }au Deploy et prouve qu’une feature ne déploie pas. - Supprime la branche et vérifie que son sous-job disparaît au scan suivant.
- Documente dans BookStack : scan vs build, multibranch vs mono-branche, CI partout / CD depuis main.
?Auto-évaluation
1. Qu’apporte un pipeline multibranch face à un job mono-branche ?
Il découvre automatiquement les branches du dépôt, crée un sous-job par branche avec Jenkinsfile, et les nettoie — sans gestion manuelle de jobs.
2. Quelle différence entre le scan et le build ?
Le scan découvre les branches (structure du dépôt) ; le build exécute le pipeline sur une branche. « If not otherwise run » évite que le scan double le travail déjà déclenché par un webhook.
3. Comment éviter que chaque branche déploie en production ?
Avec une condition when { branch ‘main’ } sur le stage Deploy : on construit partout, on ne déploie que depuis main.