Par Maxime Jumelle
CTO & Co-Founder
Publié le 23 nov. 2023
Catégorie Cloud / DevOps
La mise en place d'une gestion efficace et automatisée des processus de construction, de déploiement et d'intégration continue est devenue essentielle dans le contexte en constante évolution du développement logiciel. C'est là que Jenkins joue un rôle crucial dans les équipes de développement et d'exploitation : il s'agit d'un serveur d'intégration continue open source, est devenu un élément essentiel du domaine DevOps et du développement logiciel contemporain.
Dans cet article, nous allons voir comment Jenkins a pu être propulsé en quelques années sur le devant de la scène, pour en faire aujourd'hui l'un des outils CI/CD les plus utilisés parmi les très nombreuses alternatives présentes sur le marché.
L'histoire de Jenkins remonte à près de deux décennies. Le projet a été créé initialement par Kohsuke Kawaguchi, un développeur de Sun Microsystems, en 2004, sous le nom de projet Hudson. Le projet Hudson était initialement conçu comme un outil interne de gestion de l'intégration continue pour l'équipe de développement de Sun Microsystems.
Jusqu'à 2010, le projet a gagné en popularité à la suite de son ouverture du code source. Mais en 2010, en raison d'une problématique politique interne à Sun Microsystems suite au rachat par Oracle, les membres fondateurs du projet étaient en désaccord. De ce désaccord est né Jenkins, qui à l'époque était un fork du projet Hudson.
Jenkins a alors continué son développement open source au fil des ans, pour devenir aujourd'hui l'un des outils les plus populaires pour la gestion de l'intégration continue et de la livraison continue, grâce à sa flexibilité, sa robustesse et sa capacité à s'intégrer à de nombreuses autres technologies.
Jenkins est un outil d'automatisation de serveur open source qui permet aux développeurs d'intégrer rapidement des changements dans leur projet et de trouver des problèmes tôt en automatisant les processus de construction et de test. Il a été initialement conçu pour les projets logiciels d'intégration continue et de déploiement continu (CI/CD), mais il est devenu un pilier de l'industrie DevOps.
Le choix de Jenkins est justifié en raison de sa grande flexibilité et de son écosystème varié. Il peut intégrer de nombreux plugins, ce qui lui permet d'intégrer presque tous les outils de développement, de test ou de déploiement. Jenkins fonctionne en mode serveur : un serveur central exécute des "tâches" spécifiées dans un répertoire de code source, déclenchées par divers événements, tels qu'un commit.
Jenkins est une application Java qui peut être exécutée dans un conteneur de servlet comme Apache Tomcat ou directement via son propre environnement d'exécution intégré. Après l'installation, Jenkins fonctionne comme un processus daemon et surveille les modifications ou les demandes entrantes sur le système de gestion de versions (VCS). Il peut être configuré à l'aide d'une interface utilisateur Web simple à utiliser.
À lire : découvrez notre formation DevOps Engineer
Jenkins peut aussi être configuré pour détecter ces changements et exécuter automatiquement un job lorsqu'un développeur pousse des modifications dans le VCS, comme Git. Le travail commencera généralement par extraire le code source le plus récent, suivi d'étapes spécifiques telles que l'exécution de scripts de construction, l'exécution de tests et la génération de rapports. Jenkins peut ensuite déployer le code dans des environnements de test ou de staging et, éventuellement, en production, en fonction des résultats et de la configuration.
Jenkins possède une architecture relativement proche de ce que l'on peut trouver sur le marché en alternatives. Néanmoins, son architecture et sa terminologie associée sont essentielles pour comprendre comment Jenkins fonctionne.
Jenkins suit un modèle maître-esclave où le serveur maître (Jenkins Master) délègue les tâches aux noeuds esclaves, ce qui permet de distribuer les charges de travail. Le Jenkins Master est le cœur de l'installation Jenkins, et c'est lui qui supervise la planification, la gestion de la configuration et la planification des travaux. De plus, le Master a la capacité de contrôler les plugins, les utilisateurs et les autorisations.
Ensuite, les Jenkins Agents, sont des nœuds (ou machines) qui sont distribués pour effectuer les tâches. Ils sont responsables de l'exécution des tâches de construction, de test et de déploiement. Un agent peut être installé sur une machine à distance et configuré pour effectuer des tâches particulières.
Ces agents peuvent alors être déployés sur n'importe quel type de plateforme : machine virtuelle, image Docker, etc.
Typiquement, les Jenkins Agents peuvent être utiles lorsqu'il y a de nombreuses automatisations à effectuer en parallèle, et que la machine exécutant Jenkins Master ne pourrait pas exécuter en même temps.
Il est par ailleurs possible d'exécuter des automatisations sans agent, et c'est d'ailleurs le comportement par défaut : le Jenkins Master peut exécuter lui-même des automatisations sans utiliser d'agents. Ce sera notamment le cas pour les projets dans lesquels il n'y a pas beaucoup d'automatisations gourmandes en ressources.
Jenkins dispose de son propre vocabulaire pour identifier des objets, des processus ou des événements. En pratique, on retrouvera un ensemble assez important de vocabulaire déjà connu parmi les autres outils équivalents.
En réalité, un pipeline, c'est plus que simplement des Jobs ordonnés. En effet, comment ces Jobs peuvent-ils communiquer entre eux ? Comment peuvent-ils se partager des informations ou des fichiers ?
Les Jobs sont isolés les uns des autres pour garantir la cohérence et la sécurité des opérations. Chaque travail s'exécute dans son propre espace de travail isolé, appelé Workspace, ce qui signifie qu'il dispose de son propre répertoire dédié où il effectue toutes les opérations de construction, de test et de déploiement. Cette isolation entre les travaux permet d'éviter les interférences potentielles entre eux et garantit que les travaux s'exécutent de manière fiable et prévisible.
Ensuite, certains de ces Jobs vont produire des Artifacts, qui sont le résultat de la construction d'une application. Il peut s'agir d'un fichier binaire, d'un package, ou d'autres éléments créés lors de la construction. En général, ce sont ces artifacts que l'on déploie.
Au final, il y a beaucoup de flexibilité au sein d'un Job, il suffit de choisir une typologie de Job qui convient à nos besoins.
Bien que Jenkins soit largement reconnu comme un outil d'automatisation de serveur puissant, ses avantages ne ressortent que lorsqu'ils sont comparés à d'autres plateformes telles que GitHub Actions ou GitLab CI. Pour clarifier son positionnement, examinons les avantages uniques que Jenkins propose et comment ils le distinguent des autres solutions CI/CD disponibles sur le marché.
Les extensions logicielles (appelées plugins) sous Jenkins ajoutent des fonctionnalités et des capacités supplémentaires au système d'intégration continue. Les plugins Jenkins sont essentiels pour personnaliser et étendre Jenkins pour répondre à des besoins spécifiques. En effet, Jenkins se veut générique et épuré : son objectif est simplement de proposer une plateforme d'automatisation pour les projets à code source.
À découvrir : notre formation DevOps Engineer
Puisqu'il serait bien trop lourd et complexe d'avoir une plateforme qui contient une très grande bibliothèque de fonctionnalité, il est plus pratique d'utiliser des plugins : cela permet d'installer et d'utiliser que les fonctionnalités dont nous avons besoin.
Parmi les plugins les plus populaires, nous avons le plugin Docker : ce dernier permet d'exécuter des jobs directement dans des conteneurs Docker. Cela permet aussi de construire des images et les pousser vers un registre d'images Docker. Mais quel est l'intérêt d'utiliser Docker pour exécuter des jobs ?
Le principal intérêt avec les conteneurs Docker sur Jenkins, c'est de pouvoir isoler les différents environnements. En effet, si le job est exécuté sur le serveur principal ou sur un agent Jenkins, alors ce dernier devra avoir toutes les dépendances logicielles installées. Par exemple, pour générer des fichiers statiques d'un projet React, npm
devra être installé. Pareil pour Java, si l'on souhaite packager une application sous forme de JAR, java
et javac
devront être installés.
Ainsi, si la plateforme est utilisée pour de nombreux projets, il y aura beaucoup de dépendances à installer, ce qui alourdira les consommations en ressources. De plus, il peut y avoir des conflits entre versions si l'on doit utiliser des versions différentes pour un même outil.
Avec les conteneurs Docker, nous avons donc beaucoup d'avantages qui règlent tous ces problèmes.
Par exemple, si un projet nécessite à la fois de tester unitairement un programme Java, de build des fichiers HTML/CSS et ensuite de packager l'application Java, chaque étape du processus sera réalisé dans un conteneur Docker différent, qui aura ses propres dépendances nécessaires pour l'étape concernée.
Jenkins est un élément clé de l'écosystème DevOps, aidant les entreprises dans leurs efforts d'intégration et de déploiement continus. Jenkins a su s'adapter aux besoins des équipes de développement grâce à sa flexibilité, à son extensibilité et à sa robustesse. Les entreprises peuvent améliorer considérablement la réactivité et la qualité de leurs produits en comprenant l'importance d'outils comme Jenkins dans le cycle de vie d'un logiciel, ce qui les rend plus compétitives sur le marché.
Vous souhaitez vous former au Cloud / DevOps ?
Articles similaires
28 févr. 2024
Pour de nombreuses entreprises, innover chaque jour en proposant des applications à ses utilisateurs est un sujet primordial. Pour autant, cette course au déploiement continu de nouvelles applications nécessite des compétences bien particulières sur les architectures Cloud, l'automatisation de projets et la supervision. C'est à partir de ce moment qu'intervient le rôle de l'ingénieur DevOps dans les entreprises.
Maxime Jumelle
CTO & Co-Founder
Lire l'article
23 févr. 2024
Dans le monde du DevOps, les conteneurs sont rapidement devenus des incontournables, aussi important que les machines virtuelles. Des plateformes de conteneurisation comme Docker ont permis de simplifier et d'accélérer la création d'image et l'exécution de conteneurs sur différents systèmes, à portée de tous.
Maxime Jumelle
CTO & Co-Founder
Lire l'article
16 févr. 2024
Dans l'approche GitOps, il existe de nombreux outils permettant d'exécuter des pipelines CI/CD : certains se concentrent uniquement sur la partie intégration continue, d'autres avec le déploiement en plus. S'il y en a un qui est considéré comme l'un des plus matures et des plus robustes, c'est bien GitLab.
Maxime Jumelle
CTO & Co-Founder
Lire l'article
60 rue François 1er
75008 Paris
Blent est une plateforme 100% en ligne pour se former aux métiers Tech & Data.
Organisme de formation n°11755985075.
Data Engineering
IA Générative
MLOps
Cloud & DevOps
À propos
Gestion des cookies
© 2024 Blent.ai | Tous droits réservés