https://img-0.journaldunet.com/Z1UbLv8x9HzkskXOTJ8AxTsQmxI=/1500x/smart/4c631fb74d004887af2883e4c53271c3/ccmcms-jdn/19530600.jpg

Sommaire

C’est quoi alors Jenkins

Jenkins est un outil d’intégration continue très populaire qui permet aux équipes de développement de collaborer plus efficacement et d’accélérer le cycle de livraison de leurs logiciels.

Jenkins est un outil open source d’intégration continue (CI) écrit en Java. Il offre une manière simple et flexible de gérer le cycle de développement de logiciels, allant de la compilation du code, aux tests, jusqu’à la livraison du produit fini. Grâce à Jenkins, les équipes de développement peuvent automatiser une grande partie du processus de construction, de test et de déploiement de leurs applications.

Pourquoi utiliser Jenkins?

L’utilisation de Jenkins présente de nombreux avantages pour les développeurs et les équipes de développement. Voici quelques-uns des avantages les plus significatifs :

  • Automatisation: Jenkins facilite l’automatisation des différentes étapes du processus de développement de logiciels, ce qui peut aider à éviter les erreurs humaines et à accélérer le cycle de développement.
  • Intégration avec d’autres outils: Jenkins peut s’intégrer avec une variété d’autres outils de développement logiciel, tels que Git, Maven, Docker, etc., ce qui le rend extrêmement flexible et adaptable aux besoins de votre projet.
  • Facilité d’utilisation: Malgré sa puissance et sa flexibilité, Jenkins est conçu pour être facile à utiliser, même pour les personnes qui ne sont pas des experts en développement de logiciels.

Installation de Jenkins

Jenkins peut être installé sur une variété de systèmes d’exploitation, y compris Linux, Windows et Mac. Voici un exemple d’installation de Jenkins sur un système Linux Ubuntu à l’aide de la ligne de commande :

# Mise à jour des packages existants
sudo apt update

# Installation de Java (Jenkins est une application Java)
sudo apt install openjdk-11-jdk

# Ajout de la clé du dépôt Jenkins
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -

# Ajout du dépôt Jenkins à la liste des sources de packages
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'

# Mise à jour des packages existants
sudo apt update

# Installation de Jenkins
sudo apt install jenkins

Une fois Jenkins installé, vous pouvez l’accéder en ouvrant un navigateur web et en naviguant vers l’URL http://localhost:8080.

Comprendre l’interface de Jenkins

Vue d’ensemble de l’interface utilisateur

L’interface utilisateur de Jenkins est assez simple et intuitive. Après avoir lancé Jenkins et ouvert l’URL http://localhost:8080 dans votre navigateur, vous serez accueilli par le tableau de bord principal de Jenkins.

  • Sur la gauche, vous trouverez un menu avec des options pour créer de nouveaux jobs, gérer Jenkins, et voir l’historique des builds.
  • Au centre de la page, vous trouverez une liste de tous les jobs que vous avez créés. Chaque job est accompagné de son statut actuel, qui indique si le dernier build a réussi ou échoué.

Configuration de Jenkins

La configuration de Jenkins est essentielle pour garantir que Jenkins fonctionne correctement avec votre environnement de développement.

Vous pouvez accéder à la page de configuration de Jenkins en sélectionnant “Manage Jenkins” dans le menu de gauche, puis “Configure System”. Sur cette page, vous pouvez configurer des éléments tels que les outils de construction, l’environnement d’exécution, et la configuration de sécurité.

Exemple de configuration du JDK (Kit de développement Java) dans Jenkins :

<jdks>
  <jdk>
    <name>jdk1.8</name>
    <home>/usr/lib/jvm/java-8-openjdk-amd64</home>
  </jdk>
</jdks>

Gestion des utilisateurs et des rôles

La gestion des utilisateurs et des rôles est une autre fonctionnalité importante de Jenkins. Vous pouvez accéder à cette fonctionnalité en sélectionnant “Manage Jenkins” dans le menu de gauche, puis “Manage Users”.

Travailler avec les jobs Jenkins

Travailler avec les jobs Jenkins

Un job Jenkins est une tâche ou un ensemble de tâches que Jenkins doit exécuter. Il peut s’agir de la construction d’un projet, de l’exécution de scripts shell, de l’exécution de tests, etc.

Pour créer un nouveau job Jenkins, accédez au tableau de bord principal de Jenkins et cliquez sur “New Item”. Ensuite, choisissez “Freestyle project”, donnez un nom à votre job, puis cliquez sur “OK”.

Configuration d’un job Jenkins

Une fois que vous avez créé un job, vous devez le configurer. Cela implique de définir les actions à effectuer lors de l’exécution du job, les déclencheurs du job, et d’autres paramètres.

Par exemple, vous pouvez configurer un job pour qu’il construise un projet à chaque fois qu’une modification est apportée au code source du projet. Pour ce faire, vous pouvez utiliser la fonction “Poll SCM” de Jenkins, qui vérifie périodiquement les modifications apportées au code source.

Exemple de configuration de “Poll SCM” pour vérifier les modifications toutes les 15 minutes :

<triggers>
  <hudson.triggers.SCMTrigger>
    <spec>*/15 * * * *</spec>
  </hudson.triggers.SCMTrigger>
</triggers>

Exécution d’un job Jenkins et interprétation des résultats

Lorsque vous exécutez un job Jenkins, il suit les étapes définies dans sa configuration et produit un ensemble de résultats.

Sur la page du job, vous pouvez voir l’état de chaque exécution du job dans la section “Build History”. Si vous cliquez sur une exécution spécifique, vous pouvez voir plus de détails sur cette exécution, y compris les journaux de construction, les artefacts produits, et d’autres informations.

Gestion des builds avec Jenkins

Comprendre le cycle de vie d’un build

Le cycle de vie d’un build dans Jenkins commence par la détection d’un événement déclencheur (par exemple, une modification dans un dépôt de code source), suivi de la compilation du code source, des tests, de l’empaquetage, de l’analyse statique du code, et finalement du déploiement ou de la publication des artefacts.

Chaque étape de ce cycle de vie peut être configurée dans Jenkins à l’aide de divers plugins et outils. Le but est de s’assurer que le code est toujours dans un état qui peut être déployé en production.

Gestion des dépendances entre les builds

Il est fréquent que différents jobs Jenkins aient des dépendances entre eux. Par exemple, un job peut nécessiter qu’un autre job soit exécuté en premier. Jenkins offre plusieurs façons de gérer ces dépendances.

Par exemple, vous pouvez utiliser l’option “Build after other projects are built” dans la configuration du job pour spécifier qu’un job ne doit être exécuté que lorsque d’autres jobs spécifiques ont été exécutés avec succès.

Exemple de configuration d’un job pour qu’il ne s’exécute qu’après le succès d’un autre job :

<buildWrappers>
  <hudson.tasks.BuildTriggerWrapper>
    <upstreamProjects>OtherJob</upstreamProjects>
  </hudson.tasks.BuildTriggerWrapper>
</buildWrappers>

Notification des résultats de build

La notification des résultats de build est une partie essentielle du processus de CI/CD. Jenkins offre plusieurs moyens de notifier les utilisateurs des résultats de build, y compris les emails, les messages Slack, les webhooks, et bien d’autres.

Par exemple, pour configurer un job pour qu’il envoie un email lorsque le build échoue, vous pouvez utiliser le plugin Email Extension de Jenkins.

Extrait de code pour configurer l’envoi d’un email après un build échoué avec le plugin Email Extension :

<publishers>
  <hudson.plugins.emailext.ExtendedEmailPublisher>
    <recipientList>your.email@example.com</recipientList>
    <configuredTriggers>
      <hudson.plugins.emailext.plugins.trigger.FailureTrigger/>
    </configuredTriggers>
  </hudson.plugins.emailext.ExtendedEmailPublisher>
</publishers>

Utilisation des plugins Jenkins

Présentation des plugins Jenkins

Jenkins, en tant que plateforme de CI/CD, est extrêmement extensible grâce à l’utilisation de plugins. Les plugins sont des modules de logiciel qui ajoutent des fonctionnalités supplémentaires à Jenkins, permettant aux développeurs de personnaliser et d’étendre Jenkins pour répondre à leurs besoins spécifiques. Il existe des milliers de plugins disponibles qui peuvent étendre Jenkins pour prendre en charge la construction, le déploiement et l’automatisation de pratiquement tous les types de projets logiciels.

Installation et gestion des plugins

L’installation de plugins dans Jenkins est un processus simple qui peut être réalisé via l’interface utilisateur de Jenkins. Jenkins propose un “Plugin Manager” intégré qui permet aux utilisateurs de rechercher, d’installer, de mettre à jour et de désinstaller les plugins.

Exemple de code pour installer un plugin via le script de la console Jenkins (Jenkins Script Console) :

Jenkins.instance.pluginManager.installNecessaryPlugins(['pluginId'])

Plugins populaires et leur utilisation

Il existe de nombreux plugins Jenkins qui sont largement utilisés par la communauté. Par exemple, le plugin Git permet à Jenkins de s’intégrer avec Git pour la gestion du code source, le plugin Docker permet à Jenkins de construire et de publier des images Docker, et le plugin Pipeline permet de définir des pipelines de CI/CD en tant que code.

Exemple de code pour configurer le plugin Git dans un pipeline Jenkins :

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/user/repo.git'
            }
        }
    }
}

Cet exemple de code définit un pipeline simple avec une seule étape “Checkout” qui clone un dépôt Git spécifié.

Intégration avec d’autres outils

Intégration avec Git

Jenkins s’intègre parfaitement avec Git, l’un des systèmes de contrôle de version les plus populaires utilisés par les développeurs. Cette intégration permet à Jenkins de récupérer le code source d’un projet depuis un dépôt Git, d’effectuer des builds lorsqu’une modification est poussée sur Git et de marquer les commits réussis ou échoués dans Git.

Extrait de code montrant l’utilisation de Git dans un Jenkinsfile (Pipeline) :

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                git 'https://github.com/user/repo.git'
            }
        }
    }
}

Intégration avec Maven

Maven est un outil de gestion de projets et de compréhension de projets largement utilisé dans les projets Java. Jenkins peut utiliser Maven pour construire des projets Java, exécuter des tests et générer des rapports de test.

Extrait de code montrant l’utilisation de Maven dans un Jenkinsfile (Pipeline) :

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean install'
            }
        }
    }
}

Intégration avec Docker

Jenkins peut s’intégrer avec Docker pour construire des images Docker, exécuter des tests dans des conteneurs Docker et déployer des applications conteneurisées. L’intégration avec Docker permet de créer un environnement de build isolé et reproductible.

Extrait de code montrant l’utilisation de Docker dans un Jenkinsfile (Pipeline) :

pipeline {
    agent { docker { image 'node:14-alpine' } }
    stages {
        stage('Test') {
            steps {
                sh 'npm install'
                sh 'npm test'
            }
        }
    }
}

Dans cet exemple, le pipeline est exécuté dans un agent qui est un conteneur Docker basé sur l’image node:14-alpine. Le code est testé à l’aide de npm, le gestionnaire de paquets Node.js.

Jenkins pour le déploiement continu (CD)

Comprendre le déploiement continu

Le déploiement continu (Continuous Deployment, CD) est une pratique de développement logiciel dans laquelle les modifications apportées au code sont automatiquement déployées dans l’environnement de production. Cela signifie qu’après un test réussi, le code est automatiquement déployé pour être utilisé par les utilisateurs finaux.

Cette approche minimise le délai entre la mise en œuvre d’une nouvelle fonctionnalité ou la correction d’un bug et son utilisation effective par les utilisateurs.

Configurer Jenkins pour le déploiement continu

Jenkins peut être configuré pour réaliser le déploiement continu grâce à ses fonctionnalités de pipeline. Ces pipelines peuvent être définis à l’aide d’un fichier “Jenkinsfile” dans votre dépôt de code source, qui définit les étapes à suivre pour construire, tester et déployer votre application.

Extrait de code d’un Jenkinsfile démontrant le déploiement continu :

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                // Vos étapes de construction
            }
        }
        stage('Test') {
            steps {
                // Vos étapes de test
            }
        }
        stage('Deploy') {
            steps {
                // Vos étapes de déploiement
            }
        }
    }
}

Dans cet exemple, une fois que les étapes de construction et de test ont été effectuées avec succès, l’application est automatiquement déployée lors de l’étape “Deploy”.

Meilleures pratiques pour le déploiement avec Jenkins

Il existe plusieurs meilleures pratiques pour le déploiement avec Jenkins, parmi lesquelles :

  • Gestion des erreurs : Utilisez les fonctionnalités de gestion des erreurs de Jenkins, comme le bloc “try/catch” dans votre Jenkinsfile, pour gérer les erreurs pendant le déploiement.
  • Notifications : Configurez des notifications pour être informé lorsque le déploiement réussit ou échoue.
  • Automatisation : Automatisez autant que possible. Par exemple, utilisez Jenkins pour automatiser les tests, la construction des images Docker, le déploiement des applications, etc.
  • Sécurité : Assurez-vous que votre instance Jenkins est sécurisée, par exemple en limitant l’accès, en utilisant des connexions sécurisées et en gardant Jenkins et ses plugins à jour.

Sécurité dans Jenkins

Comprendre la sécurité dans Jenkins

La sécurité dans Jenkins concerne l’application des mesures pour protéger Jenkins contre les menaces possibles. Cela peut inclure l’empêchement des accès non autorisés, la protection des données sensibles, et la mise en place des contrôles d’accès pour les utilisateurs et les tâches de Jenkins.

Configurer la sécurité dans Jenkins

Pour configurer la sécurité dans Jenkins, vous pouvez accéder à “Manage Jenkins” puis “Configure Global Security”. Vous avez plusieurs options à votre disposition :

  • Activer/désactiver la sécurité : cette option vous permet de contrôler si l’authentification et l’autorisation sont nécessaires pour accéder à Jenkins.
  • Stratégie d’autorisation : cela vous permet de définir qui peut faire quoi. Par exemple, vous pouvez configurer Jenkins pour que seuls certains utilisateurs ou groupes d’utilisateurs puissent exécuter certaines tâches.
  • Méthode d’authentification : vous pouvez choisir d’utiliser Jenkins’ own user database, LDAP, ou d’autres méthodes d’authentification.

Meilleures pratiques de sécurité avec Jenkins

Il existe plusieurs meilleures pratiques pour la sécurité avec Jenkins, parmi lesquelles :

  • Mises à jour régulières : Gardez votre instance Jenkins et vos plugins à jour pour bénéficier des dernières corrections de sécurité.
  • Principe du moindre privilège : Accordez aux utilisateurs et aux tâches de Jenkins uniquement les privilèges dont ils ont besoin.
  • Sécurité au niveau du système : Assurez-vous que le système sur lequel Jenkins s’exécute est également sécurisé. Cela peut inclure des mesures telles que l’utilisation d’un pare-feu, la limitation des accès au système, et l’application des correctifs de sécurité du système.
  • Utiliser HTTPS : Si vous accédez à Jenkins via un réseau, utilisez HTTPS pour protéger les communications entre le navigateur et Jenkins.

Exemple d’une configuration de sécurité dans un script Groovy pour Jenkins :

import jenkins.model.*
import hudson.security.*

def instance = Jenkins.getInstance()

def hudsonRealm = new HudsonPrivateSecurityRealm(false)
hudsonRealm.createAccount("username", "password")
instance.setSecurityRealm(hudsonRealm)

def strategy = new FullControlOnceLoggedInAuthorizationStrategy()
instance.setAuthorizationStrategy(strategy)

instance.save()

Ce script crée un nouveau compte et configure Jenkins pour n’autoriser l’accès complet qu’aux utilisateurs authentifiés.

Gestion avancée de Jenkins

Configuration de l’intégration continue distribuée

L’intégration continue distribuée (ICD) est une pratique qui consiste à distribuer les tâches de build et de test sur plusieurs machines. Jenkins supporte l’ICD à travers son système d’agents. Un agent est une machine qui est configurée pour exécuter des tâches pour un maître Jenkins.

Pour configurer l’ICD, vous pouvez aller dans “Manage Jenkins” > “Manage Nodes and Clouds” > “New Node”. Vous pouvez alors spécifier le nom de l’agent, la description, le répertoire de travail, le nombre d’exécuteurs (qui détermine combien de tâches l’agent peut exécuter simultanément) et d’autres paramètres.

Optimisation des performances de Jenkins

Il existe plusieurs façons d’optimiser les performances de Jenkins. Par exemple, vous pouvez :

  • Utiliser l’ICD pour répartir la charge sur plusieurs machines.
  • Limiter le nombre de builds simultanés pour éviter une surcharge du système.
  • Configurer un nettoyage régulier des anciens builds pour économiser l’espace disque.
  • Utiliser un SSD pour le disque où se trouve le répertoire de travail de Jenkins.
  • Augmenter la mémoire allouée à Jenkins si nécessaire.

Sauvegarde et restauration de Jenkins

Il est important de sauvegarder régulièrement votre configuration Jenkins et vos données de build, afin de pouvoir les restaurer en cas de problème.

Pour sauvegarder Jenkins, vous pouvez utiliser le plugin “ThinBackup”. Une fois installé, vous pouvez aller dans “Manage Jenkins” > “ThinBackup” pour configurer vos sauvegardes.

Pour restaurer Jenkins à partir d’une sauvegarde, vous pouvez simplement copier les fichiers de la sauvegarde vers le répertoire de Jenkins.

Voici un exemple d’un script shell pour la sauvegarde de Jenkins:

#!/bin/bash
JENKINS_HOME="/var/lib/jenkins"
BACKUP_DIR="/var/backups/jenkins"

# Créer le répertoire de sauvegarde s'il n'existe pas
mkdir -p $BACKUP_DIR

# Sauvegarder le répertoire de Jenkins
tar zcvf $BACKUP_DIR/jenkins_home_$(date +%Y%m%d).tar.gz $JENKINS_HOME

Ce script crée une sauvegarde compressée de votre répertoire de Jenkins et la stocke dans un répertoire de sauvegardes avec la date du jour dans le nom du fichier.

Cas pratique : mise en place d’un pipeline CI/CD avec Jenkins

Description du projet

Ce chapitre mettra l’accent sur la mise en pratique des concepts précédemment appris dans le livre. Nous allons mettre en place un pipeline d’intégration continue/déploiement continu (CI/CD) pour une application web simple utilisant Jenkins.

Mise en place du pipeline

La première étape sera de créer un nouveau job dans Jenkins pour notre projet. Nous utiliserons le type de job “Pipeline”, qui nous permet de définir l’ensemble du processus d’IC/CD dans un fichier Jenkinsfile.

Voici un exemple simple de Jenkinsfile :

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building...'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying...'
            }
        }
    }
}

Ceci est un exemple très basique de pipeline avec trois étapes : Build, Test et Deploy. Chaque étape a un seul pas qui imprime un message. Dans un véritable projet, ces étapes incluraient des commandes pour compiler le code, exécuter des tests automatiques et déployer l’application sur un environnement de production.

Analyse des résultats

Une fois que le pipeline est en place et que les jobs sont exécutés, Jenkins fournit un certain nombre d’outils pour analyser les résultats. Vous pouvez voir le statut de chaque job dans le tableau de bord de Jenkins, et cliquer sur un job pour voir plus de détails.

Par exemple, si une étape de test échoue, vous pouvez voir quel test a échoué et pourquoi. Si une étape de déploiement échoue, vous pouvez voir les logs du serveur pour comprendre ce qui a mal tourné. Jenkins offre également la possibilité de visualiser des tendances sur une période de temps, comme la durée des builds ou le nombre de tests qui échouent.

Conclusion et perspectives d’avenir pour Jenkins

src : https://i0.wp.com/www.janbasktraining.com/blog/uploads/images/What-is-Jenkins_1.jpg?resize=740%2C329&ssl=1
src : https://www.janbasktraining.com/blog/uploads/images/What-is-Jenkins_1.jpg

Résumé des points clés

Dans ce livre, nous avons exploré Jenkins de manière approfondie, depuis l’installation et la compréhension de son interface utilisateur jusqu’à la gestion des jobs et des builds. Nous avons abordé l’intégration avec divers outils, l’importance de la sécurité dans Jenkins et comment configurer Jenkins pour le déploiement continu. Enfin, nous avons conclu par un projet pratique pour mettre en place un pipeline CI/CD avec Jenkins.

Tendances et évolutions futures de Jenkins

Jenkins continue d’évoluer pour répondre aux besoins changeants des équipes de développement. Avec l’adoption croissante des microservices et des conteneurs, Jenkins s’adapte en offrant de meilleures intégrations avec des outils comme Docker et Kubernetes.

De plus, l’accent est mis sur l’amélioration de l’expérience utilisateur, la facilité d’utilisation et la performance.

Ressources pour continuer à apprendre

La maîtrise de Jenkins ne s’arrête pas à la fin de ce livre. Pour continuer à développer vos compétences, vous pouvez explorer le vaste écosystème de plugins Jenkins, participer à la communauté Jenkins à travers des forums et des groupes d’utilisateurs, et rester à jour avec les dernières versions et fonctionnalités de Jenkins. Des ressources en ligne, telles que la documentation officielle de Jenkins et divers tutoriels et blogs, peuvent également être utiles pour approfondir votre compréhension de cet outil puissant.