Réaliser un pipeline d’intégration continue (CI) en utilisant Jenkins, Terraform, Git, Bash,Github webhook, Git, Maven, SanorQube et Nexus.

Aka N'gweyeno Lynda Audrey
6 min readDec 6, 2023

--

L’intégration continue (CI) est une pratique essentielle qui garantit que les modifications de code soient régulièrement construites, testées et intégrées dans un référentiel partagé. Cela permet de détecter et de résoudre les problèmes rapidement, et de fournir des logiciels de haute qualité aux utilisateurs finaux.

Pour ce projet nous allons créer un pipeline d’intégration continue, le but étant que lorsque le code et poussé vers le repository git, une chaine d’automation se déclenche et le code ensuite retiré, analysé, packagé et stocké dans le repository Nexus sous plusieurs versions.

Présentations des outils que nous allons utiliser :

Jenkins est un outil d’automatisation largement utilisé pour la mise en place de pipelines CI/CD. Il est flexible et extensible, et offre une grande variété de plugins pour prendre en charge différents outils et langages de programmation.

Terraform est un outil d’Infrastructure as Code (IaC) qui permet de provisionner et de gérer l’infrastructure de manière automatisée.

Nexus est un référentiel d’artefacts binaires qui permet de stocker, gérer et distribuer les artefacts logiciels.

Git est un système de contrôle de version distribué qui permet aux développeurs de suivre les modifications apportées au code

Github est un hébergeur de code source basé sur Git. Il est utilisé par des millions de développeurs pour héberger leurs projets de code, et offre une variété de fonctionnalités pour la collaboration et le travail d’équipe.

Maven simplifie la gestion des projets logiciels en automatisant les tâches de construction.

Amazon AWS offre une plateforme cloud complète pour le déploiement et la gestion scalable des applications.

Architecture du projet :

Architecture du projet

Fonctionnement du projet :

Les développeurs écrivent du code sur leur IDE de choix, cet IDE est connecté à un repository distribué, dans ce projet nous utiliserons Github. Quand le code est prêt ils l’envoient vers le repository, a ce moment-là Jenkins qui sera connecté à Github à travers Github webhook détecte la présence de code supplémentaire, récupère le code, le test, scanne le code pour trouver des vulnérabilités avec SonarQube scanner le résultat de ce scanne sera publié vers le server, SonnarQube. Le code sera ensuite packagé par un outil de build ici nous utiliserons Maven car notre code est en java

Pour packager le code il nous faudra des dépendances Maven et ces dépendances seront stocké dans nexus, Jenkins téléchargera dont les dépendances depuis nexus. C’est aussi dans ce repository que l’artefact final du code sera stocké après le build.

Étapes de la création du pipeline CI :

  1. Provisionner l’infrastructure avec Terraform

La première étape consiste à provisionner l’infrastructure avec Terraform en utilisant le workflow terraform, write, plan, apply. Les ressources suivantes sont créées :

· Une VPC (réseau virtuel) avec tous les éléments nécessaires (Internet Gateway, table de routage, route par défaut, une table de routage par défaut, une availibility zones un sou réseau public et un sou réseau privé, etc…)

· Un server pour installer Jenkins et réaliser le pipeline

· Un server pour installer nexus pour stocker et retirer les artéfacts

· Une clé SSH pour accéder aux instances

· Des security group (firewall) pour sécuriser les instances EC2

Nous écrivons ensuite trois script bash qui seront utilisé par AWS à travers userdata pour installer jenkins, SonarQube et nexus sur les servers respectifs lors de leurs initialisations. Une fois l’infrastructure provisionnée passer à l’étape suivante.

Vous pouvez trouver le code terraform de l’infrastructure sur mon comte github ici.

Liste des EC2 créées dans AWS

2. Configurer les servers

Une fois que les serveurs sont démarrés, on doit les configurer. Pour cela il faut y accéder via la clé SSH crée précédemment et suivre les étapes nécessaires pour créer un compte et se connecter. Une fois connecté on peut ensuite configurer nos comptes.

Pour Jenkins, on installe les plugins des outils dont on a besoin c’est-à-dire Github Intégration, Maven Intégration, Nexus Aritfact Uploader, SonarQube Scanner ainsi que les outils nécessaires dans la configuration system : Oracle JDK, Maven, SonarQube scanner et SonarQube server. On ajoute aussi des identifiants nexus afin de permettre à Jenkins d’accéder au server nexus pour stocker et retirer des artéfacts

Ecran d’accueil jenkins

Pour Nexus, on se connecte et crée quatre repositories, un repository snapshot, un repository release, un repository central et un repository group pour tous les regrouper.

Ecran d’accueil de nexus
Création d’un group de repository dans nexus

Pour SonarQube, on se connecte à travers l’adresse IP public.

Ecran d’accueil de sonarqube

3. Créer un référentiel Git

La troisième étape consiste à créer un repository Githup pour stocker le code de l’application. Nous connectons d’abord notre compte github et notre interface de développement ici VSCode afin que chaque changement soit envoyé vers le repository github approprié, nous utiliserons des clés SSH pour le faire. L’application utilisé dans ce projet est vprofile une application web codée en java, elle est publique nous allons donc allons cloner cette application sur notre ordinateur, nous allons ensuite créer un repository dans notre compte github et envoyer le code vers le repository que nous avons créé l’aide de commandes comme git add, commit et push. Nous devons configurer un github webhook et activer le Github hook trigger for GITScm polling dans les paramètres afin que chaque modification soit détectée par Jenkins.

Github webhook
Configuration Jenkins

4. Création du pipeline avec code

La quatrième étape consiste à créer le fichier Jenkinsfile que jenkins utilisera pour la création d’un job :

Capture vscode du fichier jenkinsfile

Vous pouvez trouver le code du pipeline jenkins sur mon repository github ici.

Nous allons ensuite créer le pipeline dans l’interface de Jenkins :

Nous configurons le pipeline pour que les étapes à suivre soient lues directement dans le jenkinsfile venant du repository github.

Configuration Jenkins pour lire le jenkinsfile

Le pipeline a 5 stages : un stage build avec maven, un stage test avec maven, deux stages analyse avec checkstyle analysis et SonarQube et un stage Upload pour envoyer l’artéfact vers nexus. Nous utilisons aussi des un block environnement pour déclarer des variables globales comme les login nexus, l’adresse ip du server nexus son port ect…

Une fois Jenkins configuré, nous pouvons exécuter le pipeline d’intégration continue. Lorsque nous poussons un nouvel commit & push sur la branche principale du référentiel Git, Jenkins sera déclenché et exécutera les étapes déclarées dans le pipeline.

Ici nous pouvons voir que le pipeline a été exécuté avec succès et l’artéfact a été analysé par SonarQube et stocké dans nexus.

Capture d’un job achevé
Capture d’une analyse soraqube achevée
Capture du tableau de bord de l’analyse sonarqube
Capture d’un artéfacte envoyé à nexus depuis jenkins

Conclusion

Dans cet article, nous avons vu comment créer un pipeline d’intégration continue avec Jenkins, Terraform, Nexus, Git, Github, et SonarQube. Ce pipeline nous permet de construire le code de l’application, tester l’application, analyser l’application et de publier les artefacts Nexus. Cela nous permet de fournir des logiciels de haute qualité aux utilisateurs finaux plus rapidement et plus facilement.

--

--