Créez Votre Premier Pipeline Déclaratif Jenkins pour le CI/CD
Jenkins est le standard de facto pour les serveurs d'automatisation open-source, servant de pilier aux pipelines d'intégration continue et de livraison continue (CI/CD) au sein de milliers d'organisations. Bien que Jenkins propose deux types de syntaxe de pipeline — Scripté et Déclaratif —, la syntaxe de Pipeline Déclaratif est l'approche recommandée pour la plupart des utilisateurs en raison de sa DSL Groovy plus simple, structurée et plus lisible.
Ce guide fournit un tutoriel complet et étape par étape sur la création de votre tout premier Pipeline Déclaratif Jenkins fonctionnel. Nous aborderons l'intégration de la gestion du code source (SCM), la définition de l'environnement de build, l'exécution des tests et l'implémentation d'une étape de déploiement d'exemple, vous offrant ainsi une base solide pour automatiser votre cycle de vie de livraison logicielle.
Comprendre la Structure du Pipeline Déclaratif
Le Pipeline Déclaratif définit l'ensemble du flux de travail dans un fichier nommé Jenkinsfile, qui est stocké aux côtés de votre code d'application dans votre dépôt SCM (par exemple, Git). Cette pratique est connue sous le nom de Pipeline en tant que Code.
Éléments Clés d'un Pipeline Déclaratif
Un Pipeline Déclaratif doit contenir les blocs de niveau supérieur suivants :
pipeline: Le bloc extérieur obligatoire définissant le contenu du pipeline.agent: Spécifie où le pipeline ou une étape spécifique sera exécuté (par exemple,any,none, ou des labels spécifiques).stages: Contient un ou plusieurs blocsstageséquentiels.stage: Définit un bloc de travail conceptuel (par exemple, Build, Test, Déploiement).steps: Contient une ou plusieurs commandes ou fonctions exécutées au sein d'unestage.
pipeline {
agent any
environment { // Facultatif : Définit les variables d'environnement
APP_VERSION = '1.0.0'
}
stages {
stage('Build') {
steps {
// Les commandes vont ici
}
}
}
post { // Facultatif : Actions exécutées après la fin du pipeline
always {
echo 'Pipeline finished.'
}
}
}
Étape 1 : Configuration du Job Jenkins
Pour exécuter un Pipeline à partir du code, vous devez configurer un job Jenkins pour lire le Jenkinsfile depuis votre dépôt.
- Naviguez vers votre tableau de bord Jenkins et sélectionnez Nouvel Élément.
- Entrez un nom pour votre pipeline (par exemple,
my-first-ci-pipeline). - Sélectionnez le type d'élément Pipeline et cliquez sur OK.
- Sur la page de configuration, faites défiler jusqu'à la section Pipeline.
- Changez la définition de Script de pipeline à Script de pipeline depuis SCM.
- Sélectionnez votre SCM (par exemple, Git).
- Entrez l'URL du Dépôt et configurez vos identifiants si nécessaire.
- Assurez-vous que le Chemin du Script est défini sur
Jenkinsfile(la valeur par défaut).
Étape 2 : Définition du Jenkinsfile pour le CI/CD
Nous allons créer un Jenkinsfile complet qui simule un flux de travail CI/CD simple, intégrant des étapes standard pour un déploiement réussi.
Supposons que vous ayez une structure de dépôt contenant le code source de votre application (par exemple, un simple projet Python ou Java) et le Jenkinsfile à la racine.
L'Exemple Complet du Pipeline Déclaratif
Ce pipeline utilise l'agent node (s'il est configuré) et des étapes shell basiques (sh) pour simuler un travail réel. L'étape de déploiement est conditionnelle, s'exécutant uniquement après la réussite des étapes précédentes.
// Jenkinsfile
pipeline {
// 1. Définition de l'Agent : Spécifie où l'ensemble du pipeline s'exécute
agent {
label 'my-build-agent' // Utilisez un label spécifique si disponible, ou 'any'
}
// 2. Variables d'Environnement : Définissez des variables utilisables tout au long du pipeline
environment {
CONTAINER_REGISTRY = 'registry.example.com'
IMAGE_NAME = 'myapp'
}
stages {
// Étape 1 : Extraction du Code Source (Source Code Management)
stage('Checkout Source') {
steps {
// L'étape 'checkout scm' extrait automatiquement le code
// en fonction de la configuration définie dans les paramètres du job Jenkins.
checkout scm
sh 'echo "Source code successfully checked out."
}
}
// Étape 2 : Construction des Artéfacts
stage('Build Artifact') {
steps {
sh 'echo "Starting build for $IMAGE_NAME:$BUILD_ID"'
// Simulation : Construire une image Docker ou compiler un fichier jar/war
sh "docker build -t ${IMAGE_NAME}:${BUILD_ID} ."
}
}
// Étape 3 : Tests et Portes de Qualité
stage('Run Tests') {
steps {
sh './run_unit_tests.sh'
sh 'echo "Running integration tests..."'
// Exemple de collecte des résultats de test (nécessite les plugins appropriés)
// junit '**/target/surefire-reports/*.xml'
}
}
// Étape 4 : Déploiement (Conditionnel)
stage('Deploy to Staging') {
// La directive 'when' garantit que l'étape ne s'exécute que sous des conditions spécifiques
when {
branch 'main'
}
steps {
sh "docker push ${CONTAINER_REGISTRY}/${IMAGE_NAME}:${BUILD_ID}"
sh 'kubectl apply -f k8s/deployment-staging.yaml'
script {
// Les blocs script permettent une logique Groovy traditionnelle au sein des étapes Déclaratives
echo "Deployment successful to Staging environment."
}
}
}
}
// 3. Post-Actions : Définir des actions basées sur le statut final du pipeline
post {
success {
echo 'Pipeline completed successfully. Notifying team via Slack...'
// slackSend channel: '#devops-alerts', message: 'CI/CD Success!'
}
failure {
echo 'Pipeline failed. Review logs for errors.'
}
cleanup {
sh 'docker rmi -f $(docker images -aq --filter label=build_id=$BUILD_ID)'
}
}
}
Étape 3 : Exécution et Surveillance du Pipeline
Une fois le Jenkinsfile commité et poussé vers la branche configurée dans votre job Jenkins :
- Sur la page du job Jenkins, cliquez sur Construire Maintenant (ou attendez le sondage SCM/le déclencheur webhook).
- Surveillez le build dans le panneau Historique des Builds.
- Cliquez sur le numéro de build en cours d'exécution et sélectionnez Sortie Console pour voir les détails d'exécution étape par étape.
- Vous pouvez également utiliser la visualisation Vue des Étapes (si le plugin est installé) pour voir la progression des étapes
Checkout,Build,TestetDeploygraphiquement.
Bonnes Pratiques et Fonctionnalités Avancées
Utilisation des Bibliothèques et du Code Partagé
Pour les étapes complexes ou très répétitives, évitez d'écrire du Groovy verbeux directement dans le Jenkinsfile. Utilisez plutôt les Bibliothèques Partagées. Ces bibliothèques externes vous permettent de définir des fonctions communes (comme des routines de déploiement standard ou des fonctions de notification) qui peuvent être appelées depuis plusieurs pipelines, rendant votre Jenkinsfile plus propre.
// Appel d'une étape de bibliothèque partagée
stage('Custom Setup') {
steps {
customLibrary.initializeEnvironment(env: 'prod')
}
}
Travailler avec les Identifiants
Ne jamais coder en dur des informations sensibles (mots de passe, jetons, clés API) directement dans le Jenkinsfile. Utilisez le système de gestion des identifiants intégré de Jenkins.
L'étape withCredentials vous permet d'accéder en toute sécurité aux secrets stockés :
stage('Authenticate Registry') {
steps {
withCredentials([usernamePassword(credentialsId: 'docker-registry-creds',
passwordVariable: 'PASS',
usernameVariable: 'USER')]) {
sh "docker login -u ${USER} -p ${PASS} ${CONTAINER_REGISTRY}"
}
}
}
Avertissement : Sélection de l'Agent
Conseil : Définissez toujours votre
agentspécifiquement en utilisant unlabelplutôt queagent any. L'utilisation deagent anysignifie que le pipeline pourrait s'exécuter sur le nœud contrôleur de Jenkins, ce qui constitue un risque de sécurité et peut impacter les performances du contrôleur. Assurez-vous d'avoir correctement configuré les agents (nœuds) Jenkins avec les outils nécessaires (Docker, Maven, Node.js) installés.
Conclusion
Le Pipeline Déclaratif Jenkins offre un cadre puissant, lisible et maintenable pour l'implémentation de l'Intégration Continue et de la Livraison Continue. En définissant la structure du flux de travail — incluant les agents, les variables d'environnement, les étapes séquentielles et les actions post-build —, vous obtenez une visibilité et un contrôle complets sur votre processus d'automatisation logicielle. Avec ce Jenkinsfile fondamental établi, vous êtes maintenant prêt à intégrer des étapes plus complexes, telles que l'analyse de sécurité automatisée, la publication d'artéfacts et les promotions multi-environnements.