{"id":934,"date":"2024-05-13T09:00:29","date_gmt":"2024-05-13T09:00:29","guid":{"rendered":"https:\/\/poyesis.fr\/blogs\/?p=934"},"modified":"2025-02-27T23:21:23","modified_gmt":"2025-02-27T23:21:23","slug":"pipeline-ci-cd-jenkins-gitlab","status":"publish","type":"post","link":"https:\/\/poyesis.fr\/blogs\/pipeline-ci-cd-jenkins-gitlab\/","title":{"rendered":"Comment construire un Pipeline CI\/CD avec Jenkins et Gitlab?"},"content":{"rendered":"\r\n<p>D\u00e9velopper une application n\u2019est jamais simple.<\/p>\r\n\r\n\r\n\r\n<p>Et plus elle est complexe, plus vous avez de chance de vous retrouver dans l\u2019une des situations suivantes :<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>vos \u00e9quipes de d\u00e9veloppement prennent de plus en plus de temps pour int\u00e9grer les nouveaux morceaux de code ;<\/li>\r\n\r\n\r\n\r\n<li>vos testeurs d\u00e9tectent les bugs tardivement ;<\/li>\r\n\r\n\r\n\r\n<li>le respect des d\u00e9lais de livraison passe d\u2019un \u201cimp\u00e9ratif\u201d \u00e0 un \u201con va essayer d\u2019\u00eatre dans les temps\u201d.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>Bref, les probl\u00e8mes techniques vont vous sauter \u00e0 la gorge et risquent de faire couler votre projet.<\/p>\r\n\r\n\r\n\r\n<p>Heureusement, l\u2019ing\u00e9nierie logicielle et l\u2019approche DevOps ont d\u00e9velopp\u00e9e une solution pour chasser ce nuage noir : l\u2019automatisation via un pipeline CI\/CD avec Jenkins et Gitlab.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Qu\u2019est-ce qu\u2019un pipeline CI\/CD et comment il dope la productivit\u00e9 de vos d\u00e9veloppeurs ?<\/h2>\r\n\r\n\r\n\r\n<p>Un pipeline CI\/CD est une s\u00e9rie d\u2019\u00e9tapes \u00e0 r\u00e9aliser durant le d\u00e9veloppement d\u2019un logiciel.<\/p>\r\n\r\n\r\n\r\n<p>Son objectif : simplifier le d\u00e9veloppement logiciel en am\u00e9liorant la distribution des nouvelles versions d\u2019un logiciel via des tests automatis\u00e9s.<\/p>\r\n\r\n\r\n\r\n<p>Il est charg\u00e9 de surveiller, d\u2019automatiser les tests manuels extr\u00eamement chronophages durant tout le cycle de vie du logiciel. Y compris lors de la phase d\u2019int\u00e9gration et celle du d\u00e9ploiement.<\/p>\r\n\r\n\r\n\r\n<p>A chaque \u00e9tape, le d\u00e9veloppeur r\u00e9dige un ou plusieurs scripts qui seront ex\u00e9cut\u00e9s \u00e0 des moments pr\u00e9cis du processus de livraison.<\/p>\r\n\r\n\r\n\r\n<p>Dis comme \u00e7a, \u00e7a peut ressembler \u00e0 une description d\u2019un th\u00e9or\u00e8me obscur sorti tout droit de l\u2019almanach d\u2019un savant fou. Mais c\u2019est en fait un gage de la qualit\u00e9 du code final et de <a href=\"https:\/\/poyesis.fr\/blogs\/rediger-cahier-charges\/\" target=\"_blank\" rel=\"noreferrer noopener\">votre capacit\u00e9 \u00e0 respecter le cahier des charges<\/a> dans les temps impartis.<\/p>\r\n\r\n\r\n\r\n<p>Pour comprendre \u00e0 quel point un pipeline CI\/CD va transformer vos processus de cr\u00e9ation d\u2019applications, il y a 2 concepts essentiels : l\u2019int\u00e9gration continue (CI) et le d\u00e9ploiement continu (CD).<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">L\u2019int\u00e9gration continue CI<\/h3>\r\n\r\n\r\n\r\n<p>Comment faire pour \u00eatre certain que l\u2019ajout de nouvelles fonctionnalit\u00e9s dans le code-source ne va pas entra\u00eener de probl\u00e8mes de compatibilit\u00e9 ?<\/p>\r\n\r\n\r\n\r\n<p>Comment \u00eatre certain que tous les membres de vos codeurs ont exactement la m\u00eame version du code que celle de la branche ma\u00eetresse ?<\/p>\r\n\r\n\r\n\r\n<p>Ou que le retrait ou la modification d\u2019un bout de corde ne va pas cr\u00e9er une cascade d\u2019erreurs li\u00e9es aux d\u00e9pendances ?<\/p>\r\n\r\n\r\n\r\n<p>Malheureusement, c\u2019est impossible \u00e0 garantir.\u00a0<\/p>\r\n\r\n\r\n\r\n<p>Surtout si votre code source est compos\u00e9 de milliers de lignes de codes, d\u2019une kyrielles de d\u00e9p\u00f4ts et de packages entrem\u00eal\u00e9s (bref, un bon gros plat de spaghetti informatique \ud83c\udf5d).<\/p>\r\n\r\n\r\n\r\n<p>Par contre, ce que vous pouvez faire, c\u2019est v\u00e9rifier automatiquement s\u2019il y a une erreur \u00e0 chaque modification d\u2019un morceau de code.<\/p>\r\n\r\n\r\n\r\n<p>C\u2019est le principe de l\u2019int\u00e9gration continue (ou continuous integration, dans la langue de Shakespeare).<\/p>\r\n\r\n\r\n\r\n<p>Pour citer <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Int%C3%A9gration_continue\" target=\"_blank\" rel=\"noreferrer noopener\">wikipedia<\/a> : \u201cL&rsquo;int\u00e9gration continue (de l&rsquo;anglais : Continuous integration, CI), est un ensemble de pratiques utilis\u00e9es en g\u00e9nie logiciel consistant \u00e0 v\u00e9rifier \u00e0 chaque modification de code source que le r\u00e9sultat des modifications ne produit pas de r\u00e9gression dans l&rsquo;application d\u00e9velopp\u00e9e\u201d.<\/p>\r\n\r\n\r\n\r\n<p>L\u2019int\u00e9gration continue permet aux programmeurs de ne plus avoir \u00e0 tester manuellement si leurs modifications cr\u00e9ent des bugs.\u00a0<\/p>\r\n\r\n\r\n\r\n<p>L\u2019outil d\u2019int\u00e9gration analyse constamment les dossiers dans lesquels se trouvent les codes. Et s\u2019il d\u00e9tecte un commit ou un git push dans votre SCM, il lance la compilation de la nouvelle version du code. Ensuite, il lance l\u2019ex\u00e9cution des tests (tests fonctionnels, tests de r\u00e9gression, tests d\u2019int\u00e9gration, tests d\u2019acceptation, etc.).<\/p>\r\n\r\n\r\n\r\n<p>A la fin, le programmeur re\u00e7oit un rapport de tests lui indiquant s\u2019il y a des erreurs et comment les corriger.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Le d\u00e9ploiement continu (CD)<\/h3>\r\n\r\n\r\n\r\n<p>R\u00e9duire le Time-to-Market de vos app pour fournir une valeur client plus rapide vous int\u00e9resse ?<\/p>\r\n\r\n\r\n\r\n<p>Si oui, vous allez adorer la livraison continue (Continuous Delivery) et le d\u00e9ploiement continu (Continuous Deployment).<\/p>\r\n\r\n\r\n\r\n<p>Concr\u00e8tement, \u00e0 chaque commit, la livraison continue va effectuer des tests automatis\u00e9s et int\u00e9grer le code. Ensuite, elle attend une validation humaine pour d\u00e9ployer la derni\u00e8re version du logiciel dans les diff\u00e9rents environnements de tests, d\u2019int\u00e9gration et de mise en production.<\/p>\r\n\r\n\r\n\r\n<p>Le d\u00e9ploiement continu va faire exactement pareil. A une diff\u00e9rence pr\u00e8s : son processus de d\u00e9ploiement automatis\u00e9 ne n\u00e9cessite aucune validation humaine.<\/p>\r\n\r\n\r\n\r\n<p>Et pour pouvoir mettre en place un pipeline m\u00ealant le CI et le CD, vous allez avoir besoin d\u2019outils d\u2019int\u00e9gration.<\/p>\r\n\r\n\r\n\r\n<p>Ce qui nous conduit \u00e0 nos deux champions du jour : GitLab CI\/CD et Jenkins.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Qu\u2019est-ce que GitLab CI\/CD et Jenkins ?<\/h2>\r\n\r\n\r\n\r\n<p>D\u2019embl\u00e9e, sachez que vous pouvez utiliser uniquement l\u2019un ou l\u2019autre, ou les deux, en fonction de votre cahier des charges et de votre \u00e9quipe.<\/p>\r\n\r\n\r\n\r\n<p>Maintenant, voyons-les en d\u00e9tail.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">GitLab<\/h3>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img fetchpriority=\"high\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/lh7-us.googleusercontent.com\/docsz\/AD_4nXe2UAqV9eQuIxenVRg5nM7hm4hvYy5jGb4S9RDggo9iVb0f7XzFNEimQIPfDBAsaCrGWOHPhWWtJ4qj6TSVI4MBt3BJmHdT6tNwAH8Kj6ycch0tuMzM12tZJuuLURMcl_BnAf7j9l4ePypeXlGQ3_PYHNDo?key=1bQvoyRcIAOmc7xJzyMkbg\" alt=\"Logo de Gitlab\" width=\"1170\" height=\"780\" \/><\/figure>\r\n\r\n\r\n\r\n<p>GitLab est un logiciel de gestion de versions (VCS) complet fortement orient\u00e9 sur la collaboration et le travail en \u00e9quipe.<\/p>\r\n\r\n\r\n\r\n<p>Et parmi ses fonctions, GitLab CI\/CD.<\/p>\r\n\r\n\r\n\r\n<p>GitLab CI\/CD est un outil de gestion de l\u2019int\u00e9gration continue et du d\u00e9ploiement continu des projets h\u00e9berg\u00e9s sur GitLab.<\/p>\r\n\r\n\r\n\r\n<p>Parmi ses fonctionnalit\u00e9s, voici quelques-unes qui sont tr\u00e8s appr\u00e9ci\u00e9es par les aficionados du code informatique :<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>la gestion du code source ;<\/li>\r\n\r\n\r\n\r\n<li>l\u2019int\u00e9gration d\u2019outils de monitoring et d\u2019analyse ;<\/li>\r\n\r\n\r\n\r\n<li>le suivi complet des probl\u00e8mes ;<\/li>\r\n\r\n\r\n\r\n<li>l\u2019usage de la syntaxe YAML ;<\/li>\r\n\r\n\r\n\r\n<li>son int\u00e9gration native avec Git.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>Toutefois, contrairement \u00e0 ce que leurs noms peuvent laisser penser, GitLab et GitHub appartiennent \u00e0 des entreprises diff\u00e9rentes.<\/p>\r\n\r\n\r\n\r\n<p>GitHub, rachet\u00e9 par Microsoft en 2018, est une autre solution open-source r\u00e9pondant aux m\u00eames besoins.<\/p>\r\n\r\n\r\n\r\n<p>N\u00e9anmoins, les deux sont bas\u00e9s sur le m\u00eame logiciel de versions d\u00e9centralis\u00e9 et open-source : git.<\/p>\r\n\r\n\r\n\r\n<p>D\u2019o\u00f9 la ressemblance dans les noms.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Jenkins<\/h3>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/lh7-us.googleusercontent.com\/docsz\/AD_4nXdQ4BL3d9A8hPh9e5s-8WDX3yS8MI0Kf-khwTmvh068ejyllZ5jWU3qilNhE3EVF-ZiRK9CRsYdA_1pMiEpgQtjCBFivmu3X17TxMZWvyvlINt2ExJuPDaT3k10SX2iCUpKIMsohc-XqHJ6JYSpnE0T1jtu?key=1bQvoyRcIAOmc7xJzyMkbg\" alt=\"Logo de Jenkins\" width=\"860\" height=\"681\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Cr\u00e9\u00e9 en 2004 sous le nom de projet Hudson, Jenkins \u00e9tait d\u2019abord un logiciel interne d\u00e9di\u00e9 \u00e0 l\u2019int\u00e9gration continue pour l\u2019\u00e9quipe de d\u00e9veloppement de Sun Microsystems.<\/p>\r\n\r\n\r\n\r\n<p>Hudson gagne en popularit\u00e9 gr\u00e2ce \u00e0 son mod\u00e8le communautaire, flexible et rapide. Sauf qu\u2019en 2009, Oracle rach\u00e8te Sun et veut imposer sa vision du processus de d\u00e9veloppement id\u00e9al d\u2019un logiciel.<\/p>\r\n\r\n\r\n\r\n<p>Plus lent. Plus contr\u00f4l\u00e9. Bref, moins agile et radicalement diff\u00e9rent de la conception des cr\u00e9ateurs originaux.<\/p>\r\n\r\n\r\n\r\n<p>Raison pour laquelle, en 2011, les d\u00e9veloppeurs originels de Hudson cr\u00e9ent un fork du projet sur GitHub. C\u2019est ce fork qui est devenu Jenkins.<\/p>\r\n\r\n\r\n\r\n<p>Alors qu\u2019est-ce que jenkins et \u00e0 quoi \u00e7a sert ?<\/p>\r\n\r\n\r\n\r\n<p>Jenkins est un serveur d\u2019int\u00e9gration continu open-source \u00e9crit dans le langage de programmation Java.<\/p>\r\n\r\n\r\n\r\n<p>Il est 100 % gratuit et mise sur la flexibilit\u00e9 et la rapidit\u00e9 des livraisons.<\/p>\r\n\r\n\r\n\r\n<p>Autre point fort de Jenkins : son immense biblioth\u00e8que qui contient plus de 1900 int\u00e9grations \u00e0 d\u2019autres outils pour passionn\u00e9s du code informatique.<\/p>\r\n\r\n\r\n\r\n<p>Voici quelques-uns des plus populaires :<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Amazon Elastic Compute Cloud ;<\/li>\r\n\r\n\r\n\r\n<li>GIT ;<\/li>\r\n\r\n\r\n\r\n<li>Jira ;<\/li>\r\n\r\n\r\n\r\n<li>Maven ;<\/li>\r\n\r\n\r\n\r\n<li>Kubernetes ;<\/li>\r\n\r\n\r\n\r\n<li>SonarQube Plugin ;<\/li>\r\n\r\n\r\n\r\n<li>Docker ;<\/li>\r\n\r\n\r\n\r\n<li>Blue Ocean.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>Et ce mod\u00e8le a d\u00e9j\u00e0 s\u00e9duit <a href=\"https:\/\/cd.foundation\/announcement\/2023\/08\/29\/jenkins-project-growth\/#:~:text=Jenkins%20market%20share%20approximately%2044%25%20in%202023&amp;text=Evans%20Data%20in%20its%20Worldwide,developers%20use%20Jenkins%20for%20CI.\" target=\"_blank\" rel=\"noreferrer noopener\">11 millions de d\u2019amateurs de programmation<\/a>.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Comment int\u00e9grer un pipeline CI\/CD avec Jenkins et Gitlab en 3 \u00e9tapes ?<\/h2>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/lh7-us.googleusercontent.com\/docsz\/AD_4nXcEGWb1V5VN3fcmzPiPMKwPenQZ0n_SYAu56iuUfdbIKcLSPPg8_KFW1iv7J-eMt70KjBuXXWghNUezPlWTxV4Jy8sVJXFWigq90rDGC1TAstDyNP-Ev0HNK-wj0sbyeGSoQY-4sdNkbfvOmHMTK8THljIT?key=1bQvoyRcIAOmc7xJzyMkbg\" alt=\"Jenkins\" width=\"951\" height=\"840\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Maintenant, entrons dans le vif du sujet : comment int\u00e9grer un pipeline CI\/CD avec Jenkins et Gitlab.<\/p>\r\n\r\n\r\n\r\n<p>Avant d\u2019aller plus loin, assurez-vous de cocher ces 2 cases :<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>vous avez cr\u00e9er un compte sur Gitlab (si ce n\u2019est pas le cas, voici tuto d\u00e9taill\u00e9 sur le sujet) ;<\/li>\r\n\r\n\r\n\r\n<li>vous avez d\u00e9j\u00e0 cr\u00e9\u00e9 un projet sur Gitlab.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>Pr\u00eat ? Commen\u00e7ons.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Etape 1 &#8211; Installer Jenkins sur votre serveur<\/h3>\r\n\r\n\r\n\r\n<p>Si vous avez d\u00e9j\u00e0 install\u00e9 Jenkins, vous pouvez sauter cette partie.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">1 &#8211; T\u00e9l\u00e9chargez et installez Java SE sur votre PC\/Serveur<\/h4>\r\n\r\n\r\n\r\n<p>Java SE est une plateforme qui contient les API et biblioth\u00e8ques de base du langage de programmation Java.<\/p>\r\n\r\n\r\n\r\n<p>Gr\u00e2ce \u00e0 ce framework, votre ordinateur sera capable de \u201ccomprendre\u201d le langage Java.\u00a0<\/p>\r\n\r\n\r\n\r\n<p>Jenkins \u00e9tant \u00e9crit en Java, Java SE est donc indispensable.<\/p>\r\n\r\n\r\n\r\n<p>Bref, rendez-vous sur la page d\u2019oracle, <a href=\"https:\/\/www.oracle.com\/in\/java\/technologies\/javase-downloads.html\" target=\"_blank\" rel=\"noreferrer noopener\">t\u00e9l\u00e9chargez la version correspondante \u00e0 votre syst\u00e8me d\u2019exploitation<\/a>. Ensuite installez-la comme n\u2019importe quel autre logiciel.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">2 &#8211; Configurez les variables d\u2019environnement pour Java<\/h4>\r\n\r\n\r\n\r\n<p>Les variables d\u2019environnement sont utilis\u00e9es pour dire en gros \u00e0 votre OS :\u201dvoici o\u00f9 il faut chercher les fichiers qui contiennent les commandes de Java\u201d.<\/p>\r\n\r\n\r\n\r\n<p>Ainsi, lorsque vous \u00e9crirez des lignes de commande sur votre serveur virtuel Jenkins, l\u2019ordinateur saura o\u00f9 aller chercher.<\/p>\r\n\r\n\r\n\r\n<p>Rassurez-vous, c\u2019est extr\u00eamement facile :<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Allez dans system -&gt; Param\u00e8tre syst\u00e8me avanc\u00e9 &gt; Avanc\u00e9 ;<\/li>\r\n\r\n\r\n\r\n<li>cliquez sur les variables d\u2019environnement ;<\/li>\r\n\r\n\r\n\r\n<li>s\u00e9lectionnez Java_Home et entre le chemin de navigation suivant : C:\\Program Files\\Java\\jdk-[Num\u00e9ro de votre version Java] ;<\/li>\r\n\r\n\r\n\r\n<li>Dans l\u2019onglet variables syst\u00e8me, ajoutez le chemin du fichier Java bin C:\\Program Files\\Java\\jdk-[Num\u00e9ro de votre version Java]\\bin ;<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>C\u2019est tout.<\/p>\r\n\r\n\r\n\r\n<h4 class=\"wp-block-heading\">3 &#8211; T\u00e9l\u00e9chargez et configurez Jenkins<\/h4>\r\n\r\n\r\n\r\n<p>Maintenant que votre desktop est configur\u00e9 pour Java, passons \u00e0 la prochaine \u00e9tape : installer Jenkins.<\/p>\r\n\r\n\r\n\r\n<p>Ca aussi, c\u2019est tr\u00e8s simple \u00e0 faire en quelques clics.<\/p>\r\n\r\n\r\n\r\n<p>Voici ce que vous avez \u00e0 faire :<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>T\u00e9l\u00e9chargez Jenkins en allant sur l\u2019adresse : <a href=\"https:\/\/www.jenkins.io\/download\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.jenkins.io\/download\/<\/a> ;<\/li>\r\n\r\n\r\n\r\n<li>lancez l\u2019installation ;<\/li>\r\n\r\n\r\n\r\n<li>choisissez \u201cex\u00e9cuter le service en local ou en tant que \u201cdomaine utilisateur\u201d;<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>Attendez patiemment que l\u2019installation se termine.<\/p>\r\n\r\n\r\n\r\n<p>Voil\u00e0, Jenkins est install\u00e9 sur votre machine.<\/p>\r\n\r\n\r\n\r\n<p>Maintenant, il faut le \u201cd\u00e9bloquer\u201d.<\/p>\r\n\r\n\r\n\r\n<p>Pour cela :<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>ouvrez votre navigateur internet et allez sur http:\/\/localhost:8080<\/li>\r\n\r\n\r\n\r\n<li>Sur l\u2019\u00e9cran qui s\u2019ouvre, entrez le mot de passe cr\u00e9\u00e9 par Jenkins dans les fichiers logs (ils sont ici : C:\\Program Files\\Jenkins\\secrets\\initialAdminPassword)<\/li>\r\n\r\n\r\n\r\n<li>Entrez le mot de passe.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>Cr\u00e9ez votre tout premier utilisateur &#8211; sans oublier de lui donner le r\u00f4le d\u2019administrateur &#8211; et le tour est jou\u00e9.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Etape 2 &#8211; Cr\u00e9ez un nouveau projet Freestyle ou Pipeline sur Jenkins<\/h3>\r\n\r\n\r\n\r\n<p>A cette \u00e9tape, vous avez d\u00e9j\u00e0 un serveur Jenkins qui fonctionne.<\/p>\r\n\r\n\r\n\r\n<p>Place \u00e0 la cr\u00e9ation du pipeline.<\/p>\r\n\r\n\r\n\r\n<p>Voici la marche \u00e0 suivre :<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Allez sur Gitlab et copiez l\u2019URL de votre r\u00e9f\u00e9rentiel (le r\u00e9pertoire de travail dans lequel se trouve votre projet) ;<\/li>\r\n\r\n\r\n\r\n<li>Connectez-vous sur Jenkins ;<\/li>\r\n\r\n\r\n\r\n<li>Allez dans les pr\u00e9f\u00e9rences ;<\/li>\r\n\r\n\r\n\r\n<li>Cr\u00e9ez un token, ou jeton d\u2019acc\u00e8s, personnel ;<\/li>\r\n\r\n\r\n\r\n<li>Stockez votre token dans un fichier texte ;<\/li>\r\n\r\n\r\n\r\n<li>Cr\u00e9ez un nouvel item et choisissez \u201cFreestyle project\u201d;<\/li>\r\n\r\n\r\n\r\n<li>Dans l\u2019onglet \u201cSource Code Project Management\u201d, choisissez Git et collez l\u2019URL de votre projet sur Gitlab ;<\/li>\r\n\r\n\r\n\r\n<li>Cochez l\u2019option \u201cTrigger Builds Remotely\u201d et ins\u00e9rez votre token personnel ;<\/li>\r\n\r\n\r\n\r\n<li>Rajoutez des \u00e9tapes dans votre pipeline si n\u00e9cessaire (celles par d\u00e9faut font parfaitement l\u2019affaire pour de petits projets) ;<\/li>\r\n\r\n\r\n\r\n<li>lancez le build.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>Et voil\u00e0. A chaque fois que l\u2019\u00e9quipe de d\u00e9veloppement modifiera le code stock\u00e9 sur le compte Git, l\u2019instance Jenkins effectuera toutes les \u00e9tapes que d\u00e9finies dans votre pipeline.<\/p>\r\n\r\n\r\n\r\n<p>De plus, vous pouvez aussi modifier votre code directement dans l\u2019interface web de l\u2019IDE de Jenkins.<\/p>\r\n\r\n\r\n\r\n<p>Vous n\u2019aurez plus qu\u2019\u00e0 aller dans l\u2019espace \u201cworkspace\u201d sur Jenkins pour lancer le build.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">\u00c9tape 3 : configurez vos pipelines Jenkins<\/h3>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/lh7-us.googleusercontent.com\/docsz\/AD_4nXe0DHWtYRsL_VrEI1Wdormao9kS-yJ856yMKZYQAar_9vjHWgIbgVjWUssScw4h9laqOqs9CxO5REWRlCDhy7tuoVWTD1Ec2oZcJBWnExy9DyGJIirN3mA_aEVEeEiI_MeztkScCMNcCLpViZNv4KZlgrFf?key=1bQvoyRcIAOmc7xJzyMkbg\" alt=\"Robot regardant la liste des \u00e9tapes d'un pipeline ci cd\" width=\"1024\" height=\"1024\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Pour modifier le pipeline cr\u00e9\u00e9 par d\u00e9faut, vous allez devoir ouvrir le jenkins file du projet. C\u2019est le fichier de configuration de votre pipeline.<\/p>\r\n\r\n\r\n\r\n<p>Il se trouve \u00e0 la racine du projet.<\/p>\r\n\r\n\r\n\r\n<p>Un jenkinsfile est un simple fichier texte dans lequel vous allez \u00e9crire vos instructions dans un langage sp\u00e9cifique \u00e0 un domaine &#8211; ou DSL.\u00a0<\/p>\r\n\r\n\r\n\r\n<p>Celui de Jenkins ressemble beaucoup \u00e0 du code Groovy.<\/p>\r\n\r\n\r\n\r\n<p>Vous avez le choix entre deux modes d\u2019\u00e9criture :<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Le mode d\u00e9claratif, plus simple, adapt\u00e9 aux d\u00e9butants et aux projets de petite envergure. Pour l\u2019utiliser, t\u00e9l\u00e9chargez le <a href=\"https:\/\/plugins.jenkins.io\/pipeline-model-definition\" target=\"_blank\" rel=\"noreferrer noopener\">plugin Pipeline Declarative<\/a> ;<\/li>\r\n\r\n\r\n\r\n<li>Le mode sc\u00e9naris\u00e9, plus complexe et plus puissant, qui s\u2019\u00e9crit dans le langage Jenkins Job DSL fourni avec <a href=\"https:\/\/plugins.jenkins.io\/workflow-aggregator\/\" target=\"_blank\" rel=\"noreferrer noopener\">le plugin pipeline<\/a>.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>Apr\u00e8s avoir t\u00e9l\u00e9charg\u00e9 le plugin correspondant \u00e0 vos attentes, installez un environnement de programmation (IDE). Visual Studio Code fera parfaitement l\u2019affaire.<\/p>\r\n\r\n\r\n\r\n<p>Voici un exemple de fichier Jenkins en mode d\u00e9claratif.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">\/\/ Declarative \/\/<br \/>pipeline {<br \/>    agent any<br \/>    stages {<br \/>        stage('Example') {<br \/>            steps {<br \/>                echo 'Hello World'<br \/>            }<br \/>        }<br \/>    }<br \/>}<br \/>\/\/ Script \/\/<\/pre>\r\n\r\n\r\n\r\n<p>Et un autre en mode sc\u00e9naris\u00e9.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-preformatted\">\/\/ Scripted \/\/<br \/>node {<br \/>    stage('Example') {<br \/>        if (env.BRANCH_NAME == 'master') {<br \/>            echo 'I only execute on the master branch'<br \/>        } else {<br \/>            echo 'I execute elsewhere'<br \/>        }<br \/>    }<br \/>}<\/pre>\r\n\r\n\r\n\r\n<p>Si vous souhaitez en apprendre plus sur les diff\u00e9rentes syntaxes des pipelines groovy, <a href=\"https:\/\/www.jenkins.io\/doc\/book\/pipeline\/syntax\/?ref=blog.ippon.fr#compare\" target=\"_blank\" rel=\"noreferrer noopener\">faites un tour sur la documentation officielle<\/a>.<\/p>\r\n\r\n\r\n\r\n<p>Ces fichiers sont tous bas\u00e9s sur les concepts propres \u00e0 Jenkins :<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>les \u00e9tapes ou \u201csteps\u201d, qui sont des t\u00e2ches uniques charg\u00e9es d\u2019ex\u00e9cuter un processus sp\u00e9cifique ;<\/li>\r\n\r\n\r\n\r\n<li>les phases ou \u201cstages\u201d, qui sont des s\u00e9rie d\u2019\u00e9tapes ;<\/li>\r\n\r\n\r\n\r\n<li>les noeuds, aka les machines sur lesquelles Jenkins s\u2019ex\u00e9cute ;<\/li>\r\n\r\n\r\n\r\n<li>enfin, les pipelines qui sont des s\u00e9ries de phases.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>Place \u00e0 l\u2019\u00e9criture de vos premi\u00e8res directives <a href=\"https:\/\/blog.stephane-robert.info\/post\/jenkins-pipeline-jenkinsfile-groovy\/\">(voici un billet qui d\u00e9taille les plus importantes<\/a>).<\/p>\r\n\r\n\r\n\r\n<p>Ce serait beaucoup trop long pour cet article, <a href=\"https:\/\/www.guru99.com\/fr\/jenkins-pipeline-tutorial.html\">alors faites un tour sur ce billet de blog enti\u00e8rement consacr\u00e9 \u00e0 l\u2019\u00e9criture des pipelines<\/a>.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Bonus : Comment cr\u00e9er un pipeline CI\/CD uniquement avec GitLab<\/h2>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-933 size-full\" src=\"https:\/\/poyesis.fr\/blogs\/wp-content\/uploads\/2024\/05\/image_editor_output_image1935132267-17152642357663544723366881702431.jpg\" alt=\"\" width=\"1024\" height=\"1024\" \/><\/figure>\r\n\r\n\r\n\r\n<p>Vous vous souvenez, plus haut nous vous avons dit que vous pouvez utiliser soit l\u2019un, soit l\u2019autre pour cr\u00e9er votre pipeline CI\/CD ?<\/p>\r\n\r\n\r\n\r\n<p>Eh bien, c\u2019est extr\u00eamement simple : vous n\u2019avez qu\u2019\u00e0 cr\u00e9er un fichier avec l\u2019extension .gitlab-ci.yml \u00e0 la racine du r\u00e9f\u00e9rentiel GitLab.<\/p>\r\n\r\n\r\n\r\n<p>Ensuite, vous d\u00e9finissez les diff\u00e9rentes \u00e9tapes de votre pipeline CI\/CD et le tour est jou\u00e9.<\/p>\r\n\r\n\r\n\r\n<p>Voici quelques sections les plus courantes dans ces fichiers:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Stages : d\u00e9finit les diff\u00e9rentes \u00e9tapes du pipeline, chacune ayant un nom significatif.<\/li>\r\n\r\n\r\n\r\n<li>+install : dans cette \u00e9tape, il y a un job appel\u00e9 install_Dependencies qui s\u2019occupe de l\u2019installation des d\u00e9pendances du projet en utilisant la commande npm install. C\u2019est une \u00e9tape courante pour s\u2019assurer que les d\u00e9pendances sont \u00e0 jour.<\/li>\r\n\r\n\r\n\r\n<li>+Cache :l\u2019\u00e9tape Node-Modules-Cache utilise une fonction de mise en cache pour stocker le r\u00e9pertoire node_modules\/ entre les ex\u00e9cutions de jobs. Il permet d\u2019\u00e9conomiser du temps en \u00e9vitant de r\u00e9installer les m\u00eames d\u00e9pendances \u00e0 chaque ex\u00e9cution.<\/li>\r\n\r\n\r\n\r\n<li>+build : c\u2019est ici qu\u2019\u00e0 lieu la construction de l\u2019application.<\/li>\r\n\r\n\r\n\r\n<li>+security :inclut des t\u00e2ches li\u00e9es \u00e0 la s\u00e9curit\u00e9 du code telles que les analyses statiques de s\u00e9curit\u00e9 SAST et les analyses dynamiques de s\u00e9curit\u00e9 (DAST).<\/li>\r\n\r\n\r\n\r\n<li>variables : d\u00e9finit les variables d\u2019environnement qui peuvent \u00eatre utilis\u00e9es dans les jobs du pipelineDe<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p>Voil\u00e0, maintenant vous savez tout ce qu\u2019il y a \u00e0 savoir sur les pipelines CI\/CD avec Jenkins et GitLab.<\/p>\r\n\r\n\r\n\r\n<p>Si vous avez besoin de discuter avec un expert, <a href=\"https:\/\/poyesis.fr\/contactez-nous\/\">n\u2019h\u00e9sitez pas \u00e0 contacter notre chef de projet informatique<\/a>.<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>D\u00e9velopper une application n\u2019est jamais simple. Et plus elle est complexe, plus vous avez de chance de vous retrouver dans l\u2019une des situations suivantes : Bref, les probl\u00e8mes techniques vont vous sauter \u00e0 la gorge et risquent de faire couler votre projet. Heureusement, l\u2019ing\u00e9nierie logicielle et l\u2019approche DevOps ont d\u00e9velopp\u00e9e une solution pour chasser ce [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":936,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jnews-multi-image_gallery":[],"jnews_single_post":{"format":"standard","override":[{"template":"7","single_blog_custom":"553","parallax":"1","fullscreen":"1","layout":"no-sidebar-narrow","sidebar":"default-sidebar","second_sidebar":"default-sidebar","sticky_sidebar":"1","share_position":"floatbottom","share_float_style":"share-normal","show_share_counter":"1","show_view_counter":"1","show_featured":"1","show_post_meta":"1","show_post_author":"1","show_post_author_image":"1","show_post_date":"1","post_date_format":"default","post_date_format_custom":"Y\/m\/d","show_post_category":"1","post_reading_time_wpm":"300","post_calculate_word_method":"str_word_count","show_zoom_button":"0","zoom_button_out_step":"2","zoom_button_in_step":"3","number_popup_post":"1","show_post_related":"1"}],"image_override":[{"single_post_thumbnail_size":"crop-500","single_post_gallery_size":"crop-500"}],"trending_post_position":"meta","trending_post_label":"Trending","sponsored_post_label":"Sponsored by","disable_ad":"0","subtitle":""},"jnews_primary_category":[],"jnews_override_bookmark_settings":{"override_bookmark_button":"0","override_show_bookmark_button":"0"},"jnews_override_counter":{"view_counter_number":"0","share_counter_number":"0","like_counter_number":"0","dislike_counter_number":"0"},"footnotes":""},"categories":[36],"tags":[224,225,226,227,228,229],"class_list":["post-934","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech","tag-cd","tag-ci","tag-devops","tag-gitlab","tag-jenkins","tag-pipeline"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/posts\/934","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/comments?post=934"}],"version-history":[{"count":1,"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/posts\/934\/revisions"}],"predecessor-version":[{"id":1197,"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/posts\/934\/revisions\/1197"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/media\/936"}],"wp:attachment":[{"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/media?parent=934"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/categories?post=934"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/poyesis.fr\/blogs\/wp-json\/wp\/v2\/tags?post=934"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}