Pipeline Jenkins : Tutoriel Complet pour Créer un Pipeline CI/CD

Un pipeline CI/CD avec Jenkins automatise vos builds, tests et déploiements.

  • JDK 8 ou 11 requis pour l’installation.
  • Lancement via jenkins.war ou image Docker jenkins/jenkins:lts.
  • Déploiement Kubernetes via Helm Chart.
  • Mot de passe initial dans initialAdminPassword.
  • Architecture maître-esclave avec agents pour jobs parallèles.

Installation et configuration de Jenkins

Avant de lancer votre premier pipeline, il faut installer Jenkins. Les prérequis sont légers : un JDK 8 ou 11 est indispensable, ainsi que 256 Mo de RAM minimum et 1 Go d’espace disque. Ces exigences modestes permettent de démarrer sur une machine modeste, mais prévoyez davantage de ressources si vous souhaitez exécuter plusieurs builds en parallèle ou intégrer Minikube (4 Go de mémoire sont alors recommandés).

  • Fichier WAR : téléchargez jenkins.war puis exécutez java -jar jenkins.war pour lancer le serveur sur le port 8080.
  • Installation Docker : récupérez l’image officielle jenkins/jenkins:lts et lancez un conteneur avec les volumes pour persister les données.
  • Installation Kubernetes : déployez Jenkins via un fichier YAML ou un Helm Chart pour une gestion native des pods et des agents.
  • Mot de passe initial : lors de la première connexion, récupérez le secret dans le répertoire « secrets » (fichier initialAdminPassword).
  • Plugins initiaux : choisissez l’installation des plugins suggérés pour disposer immédiatement des outils Git, Docker et Pipeline.

Première connexion et configuration initiale

Après avoir déverrouillé l’interface avec le mot de passe initial, vous arriverez sur l’assistant de configuration. C’est le moment de créer votre utilisateur administrateur et de définir l’URL du serveur. Cette étape ne prend que quelques minutes et débloque l’accès au tableau de bord.

Une fois connecté, installez les plugins recommandés par défaut : ils couvrent l’intégration Git, la gestion des artefacts et la création de pipelines. Vous pourrez toujours ajouter plus tard parmi les 1 000 plugins disponibles pour étendre les fonctionnalités selon vos besoins.

Pour vérifier que tout fonctionne, accédez à http://localhost:8080 et ouvrez le tableau de bord. Vous verrez immédiatement les menus pour créer un nouveau « Job » ou configurer des nœuds. Si vous avez déployé sur Kubernetes, l’accès se fera via l’adresse du service exposé, par exemple 172.22.205.156:30559 pour un NodePort typique.

Une fois le pipeline opérationnel, il est essentiel de mesurer sa performance. Des métriques comme celles proposées par Ragas permettent d’évaluer la qualité des réponses générées.

La configuration réseau est essentielle : assurez-vous que les ports 8080 (interface web) et 50000 (agents) sont accessibles si vous travaillez en architecture maître-esclave. Pour une installation Docker, montez les volumes /var/jenkins_home afin de conserver vos configurations après redémarrage.

Qu’est-ce que Jenkins ? (Présentation, histoire et architecture)

ci cd avec jenkins

Créé par Kohsuke Kawaguchi en 2004 sous le nom de Hudson, Jenkins est un serveur d’automatisation open source écrit en Java. Après le rachat de Sun Microsystems par Oracle en 2009, la communauté a fait scission en 2010 pour donner naissance au projet Jenkins, qui est devenu la référence en matière d’orchestration de builds, de tests et de déploiements.

Son architecture repose sur un modèle maître-esclave : le nœud maître (master) planifie les tâches, tandis que les agents exécutent les jobs en parallèle. L’écosystème compte plus de 1 000 plugins pour s’intégrer à Git, Docker, Kubernetes et d’autres outils du cycle DevOps, né en 2007.

Chaque projet est représenté par un job (tâche) dont chaque exécution s’appelle un build. Cette structure offre une flexibilité totale pour automatiser les processus de livraison continue, depuis la compilation jusqu’au déploiement en production.

Qu’est-ce qu’un pipeline CI/CD ? (Définitions CI et CD)

Un pipeline CI/CD est l’épine dorsale d’une démarche DevOps. La CI (Intégration Continue) consiste à fusionner régulièrement le code des développeurs dans un dépôt partagé, puis à exécuter automatiquement des tests à chaque modification. Cette pratique, qui a émergé avec le mouvement DevOps apparu en 2007, permet de détecter les erreurs très tôt et d’éviter les conflits de code.

Le CD (Continuous Delivery ou Continuous Deployment) va plus loin : il automatise la préparation et la mise en production de l’application. L’objectif est de réduire le Time-to-Market en livrant des logiciels plus rapidement et de manière fiable. Un pipeline surveille chaque étape, du commit Git jusqu’au déploiement, éliminant les tests manuels chronophages.

En résumé, ce processus automatisé transforme un flux de travail manuel et risqué en un système reproductible. Grâce à des outils comme Jenkins, chaque modification de code déclenche une séquence : build, test, puis déploiement, une approche qui gagne en reproductibilité avec des conteneurs Docker. C’est une approche fondamentale pour toute équipe souhaitant améliorer la qualité de son logiciel tout en accélérant sa distribution.

Création d’un premier pipeline Jenkins (Tutoriel pas à pas et Jenkinsfile)

Pour matérialiser votre chaîne CI/CD, la création d’un pipeline est l’étape cruciale. Jenkins repose sur les Jenkinsfiles, des fichiers texte versionnés qui décrivent l’ensemble du processus d’automatisation. Notre exemple concret se concentrera sur un pipeline composé de 2 stages (build et test), une structure minimale mais parfaitement représentative du fonctionnement de l’outil.

Rédiger un Jenkinsfile (syntaxes déclarative et scriptée)

Le Jenkinsfile est le cœur de votre pipeline. Il existe deux syntaxes principales pour le rédiger, chacune ayant ses forces :

– Syntaxe déclarative : elle est structurée et lisible. Elle utilise des blocs `pipeline`, `stages` et `steps` pour définir le flux de travail. C’est l’approche recommandée pour débuter.
– Syntaxe scriptée (Groovy) : elle est flexible et puissante, offrant un contrôle plus fin via un script Groovy, mais elle est aussi plus complexe à appréhender.
– Stockage dans le contrôle de version : le fichier est stocké dans votre dépôt Git, permettant de versionner les changements de configuration comme du code classique.
– Étapes Build/Test/Deploy : le pipeline est segmenté en stages logiques. Notre exemple se limitera à l’étape de compilation (build) et à l’exécution des tests.

Configurer un pipeline avec un dépôt Git

Prenons un exemple concret. La configuration d’un pipeline avec Git se fait en deux temps. Premièrement, vous créez un « Nouvel Item » dans Jenkins et choisissez le type « Pipeline ». Ensuite, dans la configuration, vous pointez vers votre dépôt Git en spécifiant l’URL et vos identifiants.

pipeline {
agent any
stages {
stage(‘Build’) {
steps {
echo ‘Compilation du projet..’
}
}
stage(‘Test’) {
steps {
echo ‘Exécution des tests automatisés..’
}
}
}
}
Ce script déclaratif définit un pipeline dont le pipeline exécute les 2 stages sur n’importe quel agent disponible (`agent any`). Il s’agit d’un point de départ minimaliste, mais qui illustre parfaitement la logique de l’outil : chaque étape de votre processus de livraison est segmentée, exécutée et journalisée par Jenkins. Cette approche « as code » simplifie la collaboration et la reproductibilité de vos builds.

Intégration de Jenkins avec Docker et Kubernetes

Déployer Jenkins avec Docker

L’utilisation de Docker pour exécuter Jenkins élimine les problèmes de configuration système. L’image officielle jenkins/jenkins embarque l’ensemble des dépendances nécessaires, ce qui rend l’installation aussi simple qu’une commande docker run.

  • Isolement et évolutivité : chaque conteneur est isolé, ce qui permet de déployer plusieurs instances sans conflit tout en ajustant les ressources facilement.
  • Simplicité d’installation : une seule commande suffit pour lancer Jenkins, sans se soucier des prérequis Java ou des variables d’environnement.
  • Transférabilité des conteneurs : l’image peut être déplacée entre machines (développement, test, production) avec un comportement strictement identique.

Pour un environnement local avec Minikube, une mémoire de 4 Go est recommandée pour exécuter Jenkins et ses agents dans des conteneurs. Cette approche permet également d’orchestrer des builds Docker directement depuis vos pipelines, en montant le socket Docker dans le conteneur Jenkins.

Déployer Jenkins sur Kubernetes

Le déploiement de Jenkins sur Kubernetes apporte une gestion dynamique des agents : chaque build peut s’exécuter dans un pod éphémère, créé et supprimé automatiquement. Trois méthodes principales existent pour ce déploiement.

  • Déploiement via fichier YAML : définissez un Deployment et un Service Kubernetes décrivant l’état souhaité de Jenkins.
  • Alternative avec Helm Chart : le chart jenkins-ci fourni par la communauté simplifie l’installation et la configuration via une seule commande helm install.
  • Exposition via service NodePort : pour accéder au dashboard depuis l’extérieur du cluster, le service crée un port dédié, comme 172.22.205.156:30559.
  • État attendu : 2 pods : le déploiement standard crée un pod pour le contrôleur et un second pour le premier agent, prêts à accepter des tâches.

Une fois le service NodePort configuré, chaque nœud du cluster redirige le trafic vers le pod Jenkins. Le fichier YAML définit également les limites de ressources pour éviter qu’un build ne consomme toute la mémoire du nœud. Pour la persistance des données, un PersistentVolumeClaim doit être ajouté afin de conserver les configurations et l’historique des builds entre les redémarrages du pod. Les secrets Kubernetes remplacent les identifiants Jenkins traditionnels pour sécuriser l’accès aux registres Docker privés.

FAQ Jenkins et pipelines CI/CD

Quelle est la différence entre Jenkins et d’autres outils CI/CD ?

Jenkins est un outil open-source auto-hébergé avec un large écosystème de plugins, tandis que des solutions comme GitHub Actions ou GitLab CI sont des services cloud intégrés. Jenkins offre plus de flexibilité et de contrôle sur l’infrastructure, mais nécessite une maintenance manuelle et une gestion de serveur dédiée, alors que les alternatives SaaS simplifient la configuration initiale.

Quel est le rôle de Jenkins dans une architecture DevOps ?

Jenkins est l’orchestrateur central qui automatise les étapes de build, de test et de déploiement au sein d’une chaîne DevOps. Il agit comme un moteur d’intégration continue qui déclenche des jobs suite à des commits Git, exécute des tests automatisés et déploie les applications vers des environnements de staging ou de production, favorisant ainsi des cycles de livraison rapides et fiables.

Comment assurer la sécurité d’un pipeline Jenkins ?

Sécuriser Jenkins nécessite de gérer les secrets avec un gestionnaire comme HashiCorp Vault, de restreindre les accès avec des rôles et permissions granulaires, d’utiliser l’authentification à deux facteurs et de mettre à jour régulièrement les plugins. Il est également crucial de vérifier que les plugins proviennent de sources fiables et de configurer un pare-feu pour limiter les accès non autorisés au serveur.

Est-il nécessaire de connaître Docker pour utiliser Jenkins ?

La connaissance de Docker est un atout majeur mais pas une obligation pour débuter avec Jenkins. Vous pouvez créer des pipelines avec des agents fonctionnant directement sur le système hôte, en utilisant des commandes shell. Cependant, Docker facilite la création d’environnements de build isolés, reproductibles et éphémères, tout en simplifiant le déploiement de Jenkins lui-même, rendant son apprentissage hautement recommandé.

Quelle est la courbe d’apprentissage pour maîtriser Jenkins ?

La courbe d’apprentissage de Jenkins est modérée, avec une prise en main de l’interface graphique en quelques jours pour les tâches de build simples, mais une maîtrise des pipelines déclaratifs complexes et de la gestion avancée des agents nécessite en général plusieurs semaines. La grande variété de plugins et la syntaxe Groovy du Jenkinsfile représentent les principaux défis pour les nouveaux utilisateurs.

Jenkins prend-il en charge les pipelines as code ?

Oui, Jenkins prend pleinement en charge les pipelines as code grâce à son fichier Jenkinsfile, qui définit les étapes de construction, de test et de déploiement de manière versionnée. Ce fichier peut être rédigé en syntaxe déclarative, plus simple et structurée, ou en syntaxe scriptée, plus flexible, et est directement stocké dans le dépôt Git du projet pour garantir la traçabilité et la collaboration.