Au bout d'un moment je suis tombé sur une pépite : les pipeline/workflow de Jenkins.
Mais avant de parler de ça, je vais vous parler de ce que je faisais traditionnellement.
Création de job et parallélisation
Fonction de la difficulté de la tâche, je passe soit par des déclenchements de jobs (natif Jenkins) soit carrément des jobs permettant d'orchestrer plusieurs lancements (plugin Multijob).
Pour ceux qui ne le connaîtrait pas, le plugin Multijob est tout de même bien fait et permet de très facilement gérer des lancements d'opérations en parallèle assez complexe (cf capture d'écran).
![]() |
| Exemple de Multijob |
Vous l'aurez compris, ça fait beaucoup d'opérations manuelles à réaliser et vous n'avez pas vraiment de moyen de faire ça proprement (sauf à bricoler les fichiers XML de Jenkins). Autre problème, vous ne savez pas qui modifie quoi à quel moment. Vous n'avez aucun moyen de savoir si une modification a été réalisée par quelqu'un qui pourrait expliquer le gros plantage de compilation au moment de la release de votre projet.
C'est là qu'on va voir en quoi les pipelines/workflows Jenkins peuvent répondre à ce type de problème.
Les pipelines sous Jenkins
Première chose à savoir, vous n'avez plus à aller dans l'interface Jenkins pour mettre à jour vos jobs : vous créez votre Job dans l'interface Jenkins (vivement qu'on puisse scripter ça proprement ...), vous associez votre repository de code, vous rentrez le nom du fichier décrivant le pipeline et c'est à peu près tout. Et le reste me direz-vous ? On va voir que le pipeline remplace ça avantageusement :
- Besoin de récupérer la dernière version du code ? Utilisez le mot clé checkout scm ;
- Besoin de lancer une tâche ? Le mot clé sh est là pour ça ;
- Lancement en parallèle ? La fonction parallel est là pour ça !
Exemple de pipeline
node() { // Étape 1 stage('etapes-1') { parallel( 'etape-1.1': { echo "Job 1 de l'étape 1" }, 'etape-1.2': { echo "Job 2 de l'étape 1" }, ) } // Étape 2 stage('etapes-2') { echo "Job 1 de l'étape 2" } // Étape 3 stage('etapes-3') { parallel( 'etape-3.1': { // Cette opération doit prendre moins de 10 secondes timeout(time: 10, unit: 'SECONDS') { echo "Job 1 de l'étape 3" } }, 'etape-3.2': { echo "Job 2 de l'étape 3" }, 'etape-3.3': { echo "Job 3 de l'étape 3" }, ) } }
Intégration dans Jenkins
- Création du job pipeline dans Jenkins ;
- Lancement du job et visualisation du résultat ;
- Affichage dans la nouvelle interface Jenkins Blue Ocean.
Stockage du pipeline dans Git
$ mkdir git/test $ cd git/test $ git init .Intégration du code :
$ git add Jenkinsfile $ git commit -m "Ajout fichier Jenkinsfile d'exemple." [master (commit racine) ccc0630] Ajout fichier Jenkinsfile d'exemple. 1 file changed, 34 insertions(+) create mode 100644 JenkinsfileReste maintenant à intégrer notre code dans l'interface de Jenkins de la manière suivante :
