Par Maxime Pfrimmer, le 13 mai 2024
AppDévelopper une application n’est jamais simple.
Et plus elle est complexe, plus vous avez de chance de vous retrouver dans l’une des situations suivantes :
Bref, les problèmes techniques vont vous sauter à la gorge et risquent de faire couler votre projet.
Heureusement, l’ingénierie logicielle et l’approche DevOps ont développée une solution pour chasser ce nuage noir : l’automatisation via un pipeline CI/CD avec Jenkins et Gitlab.
Un pipeline CI/CD est une série d’étapes à réaliser durant le développement d’un logiciel.
Son objectif : simplifier le développement logiciel en améliorant la distribution des nouvelles versions d’un logiciel via des tests automatisés.
Il est chargé de surveiller, d’automatiser les tests manuels extrêmement chronophages durant tout le cycle de vie du logiciel. Y compris lors de la phase d’intégration et celle du déploiement.
A chaque étape, le développeur rédige un ou plusieurs scripts qui seront exécutés à des moments précis du processus de livraison.
Dis comme ça, ça peut ressembler à une description d’un théorème obscur sorti tout droit de l’almanach d’un savant fou. Mais c’est en fait un gage de la qualité du code final et de votre capacité à respecter le cahier des charges dans les temps impartis.
Pour comprendre à quel point un pipeline CI/CD va transformer vos processus de création d’applications, il y a 2 concepts essentiels : l’intégration continue (CI) et le déploiement continu (CD).
Comment faire pour être certain que l’ajout de nouvelles fonctionnalités dans le code-source ne va pas entraîner de problèmes de compatibilité ?
Comment être certain que tous les membres de vos codeurs ont exactement la même version du code que celle de la branche maîtresse ?
Ou que le retrait ou la modification d’un bout de corde ne va pas créer une cascade d’erreurs liées aux dépendances ?
Malheureusement, c’est impossible à garantir.
Surtout si votre code source est composé de milliers de lignes de codes, d’une kyrielles de dépôts et de packages entremêlés (bref, un bon gros plat de spaghetti informatique 🍝).
Par contre, ce que vous pouvez faire, c’est vérifier automatiquement s’il y a une erreur à chaque modification d’un morceau de code.
C’est le principe de l’intégration continue (ou continuous integration, dans la langue de Shakespeare).
Pour citer wikipedia : “L’intégration continue (de l’anglais : Continuous integration, CI), est un ensemble de pratiques utilisées en génie logiciel consistant à vérifier à chaque modification de code source que le résultat des modifications ne produit pas de régression dans l’application développée”.
L’intégration continue permet aux programmeurs de ne plus avoir à tester manuellement si leurs modifications créent des bugs.
L’outil d’intégration analyse constamment les dossiers dans lesquels se trouvent les codes. Et s’il détecte un commit ou un git push dans votre SCM, il lance la compilation de la nouvelle version du code. Ensuite, il lance l’exécution des tests (tests fonctionnels, tests de régression, tests d’intégration, tests d’acceptation, etc.).
A la fin, le programmeur reçoit un rapport de tests lui indiquant s’il y a des erreurs et comment les corriger.
Réduire le Time-to-Market de vos app pour fournir une valeur client plus rapide vous intéresse ?
Si oui, vous allez adorer la livraison continue (Continuous Delivery) et le déploiement continu (Continuous Deployment).
Concrètement, à chaque commit, la livraison continue va effectuer des tests automatisés et intégrer le code. Ensuite, elle attend une validation humaine pour déployer la dernière version du logiciel dans les différents environnements de tests, d’intégration et de mise en production.
Le déploiement continu va faire exactement pareil. A une différence près : son processus de déploiement automatisé ne nécessite aucune validation humaine.
Et pour pouvoir mettre en place un pipeline mêlant le CI et le CD, vous allez avoir besoin d’outils d’intégration.
Ce qui nous conduit à nos deux champions du jour : GitLab CI/CD et Jenkins.
D’emblée, sachez que vous pouvez utiliser uniquement l’un ou l’autre, ou les deux, en fonction de votre cahier des charges et de votre équipe.
Maintenant, voyons-les en détail.
GitLab est un logiciel de gestion de versions (VCS) complet fortement orienté sur la collaboration et le travail en équipe.
Et parmi ses fonctions, GitLab CI/CD.
GitLab CI/CD est un outil de gestion de l’intégration continue et du déploiement continu des projets hébergés sur GitLab.
Parmi ses fonctionnalités, voici quelques-unes qui sont très appréciées par les aficionados du code informatique :
Toutefois, contrairement à ce que leurs noms peuvent laisser penser, GitLab et GitHub appartiennent à des entreprises différentes.
GitHub, racheté par Microsoft en 2018, est une autre solution open-source répondant aux mêmes besoins.
Néanmoins, les deux sont basés sur le même logiciel de versions décentralisé et open-source : git.
D’où la ressemblance dans les noms.
Créé en 2004 sous le nom de projet Hudson, Jenkins était d’abord un logiciel interne dédié à l’intégration continue pour l’équipe de développement de Sun Microsystems.
Hudson gagne en popularité grâce à son modèle communautaire, flexible et rapide. Sauf qu’en 2009, Oracle rachète Sun et veut imposer sa vision du processus de développement idéal d’un logiciel.
Plus lent. Plus contrôlé. Bref, moins agile et radicalement différent de la conception des créateurs originaux.
Raison pour laquelle, en 2011, les développeurs originels de Hudson créent un fork du projet sur GitHub. C’est ce fork qui est devenu Jenkins.
Alors qu’est-ce que jenkins et à quoi ça sert ?
Jenkins est un serveur d’intégration continu open-source écrit dans le langage de programmation Java.
Il est 100 % gratuit et mise sur la flexibilité et la rapidité des livraisons.
Autre point fort de Jenkins : son immense bibliothèque qui contient plus de 1900 intégrations à d’autres outils pour passionnés du code informatique.
Voici quelques-uns des plus populaires :
Et ce modèle a déjà séduit 11 millions de d’amateurs de programmation.
Maintenant, entrons dans le vif du sujet : comment intégrer un pipeline CI/CD avec Jenkins et Gitlab.
Avant d’aller plus loin, assurez-vous de cocher ces 2 cases :
Prêt ? Commençons.
Si vous avez déjà installé Jenkins, vous pouvez sauter cette partie.
Java SE est une plateforme qui contient les API et bibliothèques de base du langage de programmation Java.
Grâce à ce framework, votre ordinateur sera capable de “comprendre” le langage Java.
Jenkins étant écrit en Java, Java SE est donc indispensable.
Bref, rendez-vous sur la page d’oracle, téléchargez la version correspondante à votre système d’exploitation. Ensuite installez-la comme n’importe quel autre logiciel.
Les variables d’environnement sont utilisées pour dire en gros à votre OS :”voici où il faut chercher les fichiers qui contiennent les commandes de Java”.
Ainsi, lorsque vous écrirez des lignes de commande sur votre serveur virtuel Jenkins, l’ordinateur saura où aller chercher.
Rassurez-vous, c’est extrêmement facile :
C’est tout.
Maintenant que votre desktop est configuré pour Java, passons à la prochaine étape : installer Jenkins.
Ca aussi, c’est très simple à faire en quelques clics.
Voici ce que vous avez à faire :
Attendez patiemment que l’installation se termine.
Voilà, Jenkins est installé sur votre machine.
Maintenant, il faut le “débloquer”.
Pour cela :
Créez votre tout premier utilisateur – sans oublier de lui donner le rôle d’administrateur – et le tour est joué.
A cette étape, vous avez déjà un serveur Jenkins qui fonctionne.
Place à la création du pipeline.
Voici la marche à suivre :
Et voilà. A chaque fois que l’équipe de développement modifiera le code stocké sur le compte Git, l’instance Jenkins effectuera toutes les étapes que définies dans votre pipeline.
De plus, vous pouvez aussi modifier votre code directement dans l’interface web de l’IDE de Jenkins.
Vous n’aurez plus qu’à aller dans l’espace “workspace” sur Jenkins pour lancer le build.
Pour modifier le pipeline créé par défaut, vous allez devoir ouvrir le jenkins file du projet. C’est le fichier de configuration de votre pipeline.
Il se trouve à la racine du projet.
Un jenkinsfile est un simple fichier texte dans lequel vous allez écrire vos instructions dans un langage spécifique à un domaine – ou DSL.
Celui de Jenkins ressemble beaucoup à du code Groovy.
Vous avez le choix entre deux modes d’écriture :
Après avoir téléchargé le plugin correspondant à vos attentes, installez un environnement de programmation (IDE). Visual Studio Code fera parfaitement l’affaire.
Voici un exemple de fichier Jenkins en mode déclaratif.
// Declarative //
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
// Script //
Et un autre en mode scénarisé.
// Scripted //
node {
stage('Example') {
if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}
}
}
Si vous souhaitez en apprendre plus sur les différentes syntaxes des pipelines groovy, faites un tour sur la documentation officielle.
Ces fichiers sont tous basés sur les concepts propres à Jenkins :
Place à l’écriture de vos premières directives (voici un billet qui détaille les plus importantes).
Ce serait beaucoup trop long pour cet article, alors faites un tour sur ce billet de blog entièrement consacré à l’écriture des pipelines.
Vous vous souvenez, plus haut nous vous avons dit que vous pouvez utiliser soit l’un, soit l’autre pour créer votre pipeline CI/CD ?
Eh bien, c’est extrêmement simple : vous n’avez qu’à créer un fichier avec l’extension .gitlab-ci.yml à la racine du référentiel GitLab.
Ensuite, vous définissez les différentes étapes de votre pipeline CI/CD et le tour est joué.
Voici quelques sections les plus courantes dans ces fichiers:
Voilà, maintenant vous savez tout ce qu’il y a à savoir sur les pipelines CI/CD avec Jenkins et GitLab.
Si vous avez besoin de discuter avec un expert, n’hésitez pas à contacter notre chef de projet informatique.
Actualité
Perplexity AI, une licorne qui promet de rendre Google “ringard” (ce sont les mots exacts de son PDG), c’est fait prendre en plein scrapping de données. Et ce n’est pas la première fois. Qu’est-ce que Perplexity AI ? Si vous n’êtes pas un abonné de la planète tech, il y a des chances que …
Continue reading « Perplexity AI pris en flagrant délit de vol de données »
27 juin 2024
Actualité
18 ans. C’est le nombre d’années qui s’est écoulé depuis la release de numpy 1.0. Numpy est un peu le couteau de suisse des mathématiques sous Pythons. Grâce à cette bibliothèque, vous pouvez gérer simplement des matrices, des polynômes et toute une kyrielle de fonctions mathématiques. Tous ceux qui font des maths l’utilisent. Des statisticiens. …
Continue reading « NumPy 2.0 sort enfin après 18 ans, on fait le point »
26 juin 2024
Actualité
Mardi 18 juin 2024. Dans un billet de blog plutôt discret, Google a annoncé le lancement de l’application Gemini (ex Bard) en Inde. Cette version de Gemini est capable de comprendre neuf langues indiennes en plus de l’anglais : l’hindi ; le bengali ; le gujarati ; Le kannada ; Le malayalam ; le marathi …
Continue reading « Google Gemini s’invite en Inde (et s’ouvre enfin à tous) »
25 juin 2024