Académique Documents
Professionnel Documents
Culture Documents
* **
**
SUJET :
SUJET :
Je dédie ce mémoire à :
i
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
REMERCIEMENTS
ii
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
AVANT-PROPOS
Génie Chimique ;
Génie Civil ;
Génie Electrique ;
Génie Informatique ;
Génie Mécanique ;
Gestion.
Dans le cadre de leur formation les étudiants du département Génie Informatique qui sont
en fin de cycle sont tenus d’effectuer un stage pratique au sein d’une entreprise ou d’un service
informatique. A l’issue de ce stage, doit être présenté et soutenu devant un jury, un mémoire
de fin de cycle portant sur le sujet traité.
iii
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
C'est ainsi que nous avons effectué un stage de cinq mois au cours duquel nous avons
travaillé sur le sujet suivant : Mise en place d’un cloud souverain : implémentation de la
chaîne CI/CD.
iv
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
RESUME
Ce travail s’inscrit dans le cadre d’un projet de création d’une plateforme cloud SaaS. Ce
projet intitulé « cloud souverain » permet aux utilisateurs de déployer facilement des sites web
et des bases de données sur le cloud. Cloud souverain est un projet subdivisé en plusieurs
parties. Nous avons travaillé sur l’automatisation des déploiements de la plateforme sur
plusieurs environnements grâce au DevOps, en mettant en place une chaîne d’intégration
continue (CI) et de déploiement continu (CD).
Dans un premier temps, nous étudions l’analyse des besoins du système. Ensuite, nous
abordons l’analyse conceptuelle de la solution en nous basant sur l’analyse des besoins
effectuée. Enfin nous présentons les résultats obtenus par rapport à la mise en place de la chaîne
d’intégration continue et de déploiement continu.
v
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
ABSTRACT
This document is an end of studies thesis for obtaining the Diploma of Design Engineer
in Telecommunications and Networks. It presents the work done on a project entitled:
“Creation of a sovereign cloud: implementation of the CI/CD pipeline”, carried out within the
company BeOpenIT.
This work is part of a project to create a SaaS cloud platform. This project called
“sovereign cloud” allows users to easily deploy websites and databases in the cloud. Sovereign
Cloud is a project subdivided into several parts. We have worked on automating the platform's
deployments across multiple environments using DevOps, setting up a continuous integration
(CI) and continuous deployment pipeline (CD).
First, we study the analysis of the system's needs. Then, we approach the conceptual
analysis of the solution based on the analysis of the needs carried out. Finally, we present the
results obtained in relation to the implementation of the continuous integration and continuous
deployment pipeline.
vi
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
TABLE DES MATIERES
INTRODUCTION ............................................................................................................ 1
2.3. Objectifs........................................................................................................ 6
b) L’approche DevOps................................................................................... 9
vii
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
1.3. Modèles de services du cloud ..................................................................... 14
d) La conteneurisation ................................................................................. 27
viii
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
a) Le gitflow................................................................................................. 38
a) Le Jenkinsfile ........................................................................................... 42
b) Le Dockerfile ........................................................................................... 43
CONCLUSION .............................................................................................................. 57
BIBLIOGRAPHIE ......................................................................................................... 58
ANNEXES ..................................................................................................................... 59
ix
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
SIGLES ET ABREVIATIONS
x
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
TABLE DES FIGURES
xi
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
Figure 30 : Conteneurs cloud-dashboard en cours d'exécution .............................................. 52
Figure 31 : Events de création des pods .................................................................................. 52
Figure 32 : Liste des images docker Hub ................................................................................ 53
Figure 33 : Service de cloud-dashboard ................................................................................. 53
Figure 34 : Page d'authentification ......................................................................................... 54
Figure 35 : Dashboard Information sur les sites web déployés .............................................. 54
xii
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
TABLE DES TABLEAUX
xiii
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
INTRODUCTION
Pour atteindre cet objectif, nous avons adopté une démarche qui s’articule autour des
quatre chapitres suivants :
1
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 1 : PRESENTATION GENERALE
CHAPITRE 1
PRESENTATIONS GENERALES
Ce chapitre permet de définir le cadre d’évolution du stage ainsi que le projet de fin
d’études. Il présente en premier lieu la structure d’accueil : BeOpenIT. En second lieu il permet
de définir le sujet de travail en spécifiant son contexte, sa problématique, ses objectifs et la
méthode de développement adoptée.
Les entreprises ont besoin de stocker leurs données qui augmentent exponentiellement
d’année en année. Sentant ce besoin, des entreprises comme Amazon, Google et Microsoft ont
créé des systèmes de cloud qui permettent aux entreprises de stocker et de sauvegarder leurs
données sur des serveurs comme AWS d’Amazon ou encore Google cloud plateforme.
Même si ces plateformes sont très performantes et simples d’utilisation, il n’en demeure
pas moins qu’elles ne peuvent servir qu’aux entreprises dont les activités ne sont pas critiques
ou dont les données ne sont pas sensibles.
Pour les entreprises aux activités sensibles comme les banques et les sociétés
gouvernementales, stocker des données sur les serveurs de ces grands groupes n’est pas une
option envisageable. Elles ont besoin de stocker leurs données sur leurs propres clouds pour
assurer la confidentialité de leurs données. Aussi, faudrait-il avoir des entreprises qui ont assez
d’expertise pour accompagner ces sociétés dans la mise en place de leurs clouds privés.
Le marché du cloud est un domaine peu exploité. Il n’existe quasiment pas d’entreprises
avec une expertise très pointue proposant de résoudre cette problématique à savoir de pouvoir
stocker les données en interne tout en bénéficiant des avantages du Cloud.
BeOpenIT est l’une des pionnières dans ce domaine et aide les entreprises dans leur
processus de transition vers le cloud.
2
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 1 : PRESENTATION GENERALE
BeOpenIT est une entreprise spécialisée dans des domaines porteurs d’avenir tels que le
Cloud, le DevOps, l’intelligence artificielle et la sécurité des systèmes d’information. Elle
accompagne ses clients dans leur processus de transition étape par étape vers ces domaines.
BeOpenIT veut former les entreprises pour qu’elles puissent être autonomes afin de lever le
mythe autour du Cloud et la sécurité des données personnelles.
Depuis 2018, elle accompagne les entreprises pour qui l'informatique est un puissant
levier de transformation et les aide à construire des systèmes d'information et des applications
qui transforment leurs entreprises. Le cloud permet de réduire les coûts de l’innovation
numérique. Nombreuses sont donc les entreprises qui cherchent des profils ou formateurs dans
ce domaine. BeOpenIT forme et conseille les entreprises qui veulent une transformation
digitale digne de ce nom.
Elle a son siège social en France. Elle est également présente à Londres et en Afrique en
particulier au Sénégal. Elle met en place des moyens pour permettre aux jeunes de se
familiariser avec les nouvelles technologies de l’information telles que les formations AWS,
cloud et kubernetes.
Elle a des partenaires dans le domaine de l’informatique avec qui elle collabore pour
fournir une expertise certifiée à ces clients.
3
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 1 : PRESENTATION GENERALE
La partie informatique de l’entreprise est subdivisée en « Business Unit » selon les secteurs
d’activités de l’entreprise. La figure 1 présente les « business units » de l’entreprise.
4
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 1 : PRESENTATION GENERALE
2.1. Contexte
Les serveurs locaux permettent d'héberger des services informatiques tels que des
applications, des systèmes de stockage de données, des serveurs web, etc.
Ils demandent un investissement financier conséquent. En effet, il faut investir dans des
serveurs physiques et assurer la maintenance des sites où sont localisés ces serveurs. Des
coûts supplémentaires tels que l’approvisionnement en électricité et la climatisation de ces
sites sont également à prévoir.
BeOpenIT accompagne les entreprises pour la mise en place de leur cloud privé si
l’entreprise possède l’infrastructure nécessaire, ou les accompagne dans leur processus de
migration vers le cloud public. Elle aide ces entreprises à offrir des services sur leur cloud. Elle
identifie leurs besoins spécifiques et apporte la solution la plus adaptée leur permettant ainsi
de tirer le meilleur de l’utilisation du cloud. Aussi s’est-elle penchée sur le cas des développeurs
ou personnes lambda qui souhaitent déployer leurs applications sur le cloud.
5
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 1 : PRESENTATION GENERALE
2.2. Problématique
Le constat est qu’il est souvent complexe pour les personnes qui développent leurs
applications de les déployer. En effet, selon le type de l’application et les technologies utilisées,
elles doivent savoir comment déployer les fichiers à exécuter en environnement de production
et assurer la continuité du service. Elles doivent aussi s’assurer que les technologies utilisées
sont compatibles avec ledit environnement. Le cas non échéant, elles sont souvent contraintes
de réadapter leur code afin qu’il soit compatible avec l’environnement mis en place.
De plus, si elles souhaitent déployer leurs applications dans le cloud, elles doivent
connaître les solutions cloud adaptées à leurs applications et les ressources nécessaires (CPU,
mémoire RAM, Stockage, etc.) à l'exécution de leurs services. Il leur faut décrire et configurer
l’environnement de déploiement sur le cloud pour qu’il soit adapté aux services qu’elles
souhaitent héberger. Ceci représente une charge de travail supplémentaire et potentiellement
de nouvelles ressources à engager.
Elles se heurtent donc aux problèmes liés au déploiement de leurs applications dans un
premier temps et ensuite à la complexité de choisir l'environnement cloud adapté.
2.3. Objectifs
L’objectif est donc de mettre en place une solution cloud qui leur permettra de s'affranchir
des problèmes liés au déploiement de leurs applications dans le cloud. Cette solution est
nommée Cloud Souverain. Elle permettra de déployer facilement des applications sur un cloud.
Il faudra pour cela :
créer une distribution Enterprise de cette plateforme pour les entreprises disposant des
infrastructures pour la déployer.
6
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 1 : PRESENTATION GENERALE
Le produit que nous mettons en place est un logiciel standard. En effet, le produit est créé
à l’initiative de l’entreprise. L’entreprise sera donc chargée de suivre l’avancement du projet
et de vérifier que les résultats obtenus sont conformes à ses attentes.
Pour réaliser ce projet, une équipe constituée de huit personnes a été formée. Elle est
répartie en sous-groupes :
Au regard de la solution que nous devons mettre en place : un SaaS, nous devons être en
mesure d’intégrer de nouvelles fonctionnalités, de les tester et de les déployer rapidement en
prenant compte des retours des utilisateurs finaux. Ceci dans le but d’améliorer
continuellement l'expérience client.
Par conséquent, deux méthodes de développement ont été adoptées : l’approche agile
SCRUM et l’approche DevOps.
7
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 1 : PRESENTATION GENERALE
SCRUM est un framework qui regroupe un ensemble de pratiques et de rôles. Ces rôles
sont :
le scrum master : Il gère l’avancement du projet. Sur ce projet le Scrum master est un
des développeurs ;
Avec la méthode SCRUM, les tâches à faire sont entreposées dans le “backlog”. Ces
tâches sont réalisées par Sprint qui sont des périodes d’une à quatre semaines. A la fin d’un
sprint un livrable est produit puis un nouveau sprint est ouvert. Ce cycle continue jusqu’à
épuisement du backlog. Des réunions journalières sont tenues pour connaître l’avancement du
projet ainsi que les points de blocage. La figure 2 illustre la méthode agile SCRUM
8
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 1 : PRESENTATION GENERALE
b) L’approche DevOps
Le terme « DevOps » est la contraction des mots anglais « Development »
(développement) et « Operations » (exploitation). Le DevOps accélère la concrétisation d’une
idée du développement au déploiement. Il s'appuie sur l'automatisation des tâches
d'exploitation courantes et la standardisation des environnements associés au cycle de vie d'une
application. Il se base aussi sur une étroite communication entre les équipes de développement
et de production afin d’améliorer l’efficacité de l’équipe. Le DevOps est donc un ensemble de
bonnes pratiques qui vise à faire collaborer les équipes de développement et d’opération dans
le but de réduire le délai de livraison des applications.
Nécessité du DevOps :
Les technologies et les environnements évoluant sans cesse, les applications existantes
doivent être constamment adaptées. Les développements d’applications doivent se faire vite en
implémentant les exigences des clients. Aussi, pour une meilleure satisfaction de ces clients,
ces nouvelles fonctionnalités doivent être rapidement accessibles. Donc la méthode de
déploiement des applications doit suivre le rythme de développement des nouvelles
fonctionnalités.
9
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 1 : PRESENTATION GENERALE
de briser les barrières entre les clients et les équipes de développement, et d’autre part comment
le DevOps enlève les barrières cette fois entre les équipes de développement et d'opérations.
Fonctionnement du DevOps
Pour implémenter efficacement une approche DevOps, il faut d’abord mettre en place
une politique de communication efficace entre les différentes équipes du projet. En effet le
DevOps repose sur la collaboration des différentes équipes pour remonter facilement les retours
des utilisateurs et leur permettre de voir rapidement leurs suggestions.
10
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 1 : PRESENTATION GENERALE
de livraison des applications. Ce principe est mis en œuvre dans le DevOps à travers les notions
d’intégration continue, de livraison continue et de déploiement continu (CI/CD).
On obtient ainsi une chaîne entièrement automatisée jusqu’en production dès lors que
les développeurs soumettent leurs codes.
L’entreprise gagne donc en efficacité et est en mesure de rester compétitive car elle
s’adapte rapidement.
Nous avons donc décider d’utiliser cette approche pour mettre en place notre cloud car
celui-ci doit pouvoir évoluer et apporter de nouvelles fonctionnalités mais aussi intégrer le plus
rapidement possible les retours des utilisateurs. La figure 4 illustre l’approche DevOps.
11
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 1 : PRESENTATION GENERALE
12
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 2 : ANALYSE DES BESOINS
CHAPITRE
2
ANALYSE DES BESIONS
Afin de mieux saisir les besoins fonctionnels et non fonctionnels du système à réaliser, il
est nécessaire de comprendre ce système. Dans le cadre de ce projet, nous devons mettre en
place un cloud SaaS. Nous allons étudier d’abord, dans ce chapitre, le cloud et ses spécificités.
Ensuite comprenant mieux le système, nous allons dégager les besoins du système à mettre en
place.
Le cloud d’autre part est un ensemble d’environnements qui regroupent et partagent des
ressources évolutives sur un réseau. Le cloud est utilisé dans le cadre d’une stratégie de cloud
computing. Le cloud computing consiste en l’exécution de charges de travail (par exemple
déployer des applications, stocker des données, etc.) sur le cloud. Donc le cloud computing
permet un accès à la demande aux ressources informatiques partagées du cloud et ceci à travers
un réseau. Aussi, le modèle cloud Computing s’articule autour de caractéristiques essentielles,
13
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 2 : ANALYSE DES BESOINS
1.2.Caractéristiques du cloud
l’accès aux services à la demande : les utilisateurs ont accès à l’ensemble des ressources
informatiques du cloud, fournies sous forme de services autant qu’ils en ont besoin ;
l’accès réseau large bande : il faut assurer une excellente connectivité réseau afin
d’offrir un meilleur temps d’accès aux ressources ;
l’élasticité : les utilisateurs peuvent redimensionner leurs ressources en quelques
secondes en intégrant facilement de nouvelles instances ;
mutualisation des ressources : le cloud computing donne accès à des
ressources disponibles selon le type de cloud sur plusieurs zones géographiques ;
Facturation à l’usage : la facturation se fait selon la quantité de ressources consommées.
Cela permet de réduire les coûts par rapport à une infrastructure physique où le risque
de surdimensionnement est élevé.
14
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 2 : ANALYSE DES BESOINS
n’importe quel type de logiciels y compris des systèmes d’exploitation. Il ne gère pas
l’infrastructure cloud sous-jacente.
Les leaders de ce type de services sont Amazon Web Service (AWS), Microsoft Azure,
Google Cloud Platform (GCP).
Comme exemples de PaaS on peut citer : Windows Azure, Google App Engine, etc.
La figure 5 montre les principaux services du cloud. La partie rouge représente les
fonctionnalités que l’utilisateur doit gérer et en noir celles prises en charge par le fournisseur
selon le type de services.
15
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 2 : ANALYSE DES BESOINS
Le cloud public
L’infrastructure cloud appartient à une organisation. L’infrastructure est ouverte au
public et aux grands groupes industriels, ils se partagent les ressources.
Le cloud privé
L’infrastructure cloud est utilisée par une seule organisation. L’infrastructure peut être
gérée par l’organisation ou par une tierce partie.
Le cloud communautaire
Pour ce type de déploiement, l’infrastructure est partagée par plusieurs organisations
pour le besoin d’une communauté souhaitant mettre en commun des ressources informatiques.
Le cloud hybride
Ce type de déploiement regroupe deux ou plusieurs modèles de déploiement privé, public
ou communautaire. Ces infrastructures sont liées entre elles par la même technologie qui
autorise la portabilité des applications et des données.
Nous avons vu ce qu’est le cloud, ses caractéristiques, les modèles de services qu’il
propose et ses types de déploiement. Le cloud présente de nombreux avantages tels que la
réduction des coûts, l’accessibilité garantie à des services à la demande, adaptables à volonté.
Le cloud est donc un atout incontournable pour les entreprises sur plusieurs niveaux.
Dans ce projet, nous mettons en place un SaaS qui fournit comme service la possibilité
de déployer des sites rapidement et de stocker des données en quelques clics, à partir d’une
interface Web. Pour ce faire, nous devons respecter les caractéristiques du cloud computing,
du développement de l’application SaaS à son déploiement sur une infrastructure.
Nous analyserons dans la suite les besoins d’une telle plateforme par rapport à la chaîne
de déploiement, donc de la fin du développement d’une fonctionnalité du logiciel à son
déploiement en production.
16
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 2 : ANALYSE DES BESOINS
La plateforme est destinée aux personnes qui souhaitent déployer des sites web ou stocker
des données et plus tard aux entreprises qui souhaitent déployer ce cloud.
Dans ce projet, nous sommes chargés de la mise en place de la chaîne DevOps. Nous
recevons le code des développeurs et nous effectuons tous les traitements jusqu’au déploiement
sur les différents environnements de production et de test.
17
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 2 : ANALYSE DES BESOINS
tolérant aux pannes toujours dans le souci d'améliorer l'accessibilité des services
proposés ;
la portabilité : le SaaS que nous devons mettre en place doit pouvoir être implémenté
sur différents environnements. La chaîne DevOps mise en place doit gérer cette
problématique tout en libérant les développeurs de la complexité d’adapter les
technologies qu’ils utilisent selon les différents environnements ;
la sécurité des services déployés : il faudra s’assurer que les services déployés en
environnement de production ne comportent pas des failles de sécurité.
Il est important de prendre en compte ces besoins lors de la mise en place de la chaîne
DevOps.
18
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 2 : ANALYSE DES BESOINS
L’analyse des besoins permet de dégager les spécifications à mettre en œuvre lors de la
phase de conception. Pour rendre cette analyse lisible par tous, le langage de modélisation
UML est souvent adopté.
La notation UML est un langage visuel constitué d’un ensemble de schémas, appelés
des diagrammes, qui donnent chacun une vision différente du projet à traiter. UML fournit un
ensemble de diagrammes qui permettent de représenter le projet à réaliser.
Pour analyser notre système, nous aurons besoin du diagramme des cas d’utilisation et
du diagramme de séquence.
19
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 2 : ANALYSE DES BESOINS
Nous allons étudier la fonctionnalité « fusionner le code d’une branche à une autre » avec
une description textuelle. Le tableau 2 permet de visualiser cette description textuelle.
20
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 2 : ANALYSE DES BESOINS
Acteurs Développeurs
Objectifs Permettre aux développeurs de fusionner un code déjà testé sur une
branche
Post conditions Un build du nouveau code obtenu après fusion est automatiquement
déclenché sur le serveur d’intégration continue.
Nous allons voir à travers une description graphique (figure 7) sur un diagramme de
séquence illustrant le scénario nominal décrit dans le tableau 2
21
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 2 : ANALYSE DES BESOINS
22
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 2 : ANALYSE DES BESOINS
23
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
CHAPITRE 3
CONCEPTION DE LA SOLUTION
L'analyse des besoins effectuée dans le chapitre précédent nous a permis de dégager les
points essentiels que le système à réaliser devra prendre en charge pour atteindre les objectifs
définis. Dans ce chapitre nous allons étudier comment réaliser ce système en prenant en
compte les besoins définis. Nous effectuerons donc l’analyse conceptuelle de la solution.
Nous allons d’abord proposer une chaîne CI/CD qui implémente les besoins non-
fonctionnels définis dans le chapitre précédent, nous préciserons les technologies et outils
utilisés à cet effet. Ensuite nous ferons une conception détaillée en expliquant comment sera
implémentée la chaîne CI/CD.
24
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
Cette étape regroupe plusieurs sous-étapes allant de la gestion des codes à la création
d’artéfacts livrables en production.
25
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
Il existe plusieurs SCM parmi lesquels nous pouvons citer SVN qui est un système de
gestion de code centralisé et Git qui est un système décentralisé. Dans le cadre de ce projet,
Git est plus adapté car il permet de travailler en simultané sur le code.
Nous travaillons donc avec Git comme système de gestion de versions de code. Il existe
plusieurs logiciels de gestion de code basés sur Git tels que GitHub, Gitlab, bitbucket.
Nous utilisons GitHub dans le cadre de ce projet. GitHub est un SCM en ligne. Il permet
de gérer efficacement les différentes versions de codes et de déclencher l’exécution de la chaîne
d’intégration continue.
Il existe dans le marché plusieurs serveurs d’intégration continue tels que Jenkins,
bamboo, circle CI, etc.
SonarQube est un logiciel libre qui permet d’évaluer la couverture de code par les tests
unitaires, les duplications de code, le respect des règles de programmation. Il permet également
de détecter un certain nombre de failles de sécurité dans le code telles que :
26
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
l’injection sql ;
le cross-site scripting ;
l’injection de code.
SonarQube permet donc de prendre en charge le besoin d’assurer la sécurité des données
des utilisateurs de la plateforme en permettant d’améliorer la qualité du code.
d) La conteneurisation
La conteneurisation consiste à embarquer ensemble le code ainsi que les dépendances,
fichiers et bibliothèques nécessaires à son exécution créant ainsi une image du code. Cela évite
les erreurs lors du déploiement dues au fait que les environnements utilisés lors du
développement diffèrent de l’environnement de production mis en place. En effet la manière
traditionnelle de déployer des applications consiste à installer les applications sur une machine
en utilisant les systèmes de gestions de paquets natifs. Cela a pour conséquence que les
exécutables produits ainsi que les dépendances et les librairies soient fortement liés au système
d’exploitation de la machine hôte. Ce qui constitue un frein à la portabilité.
D’autre part, l'exécution des conteneurs se fait de manière isolée, on peut donc exécuter
plusieurs applications sur un même environnement sans risque.
27
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
conteneurs sont donc plus légers et leur exécution est plus rapide. La figure 9 illustre les
différences qui existent entre la virtualisation et la conteneurisation.
Ils permettent aussi de gérer le besoin de portabilité induit par le fait que la plateforme
doit pouvoir être déployée dans un cloud public et dans le cloud privé d’une entreprise. Cela
permet également d’augmenter la rapidité de déploiement car il n’est plus nécessaire d’adapter
les environnements selon le code ; chaque conteneur s'exécute de la même manière quel que
soit l’environnement de déploiement.
28
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
Il existe plusieurs outils de conteneurisation tels que : docker, linux Container (LXC),
etc.
Docker est outil de conteneurisation open-source qui permet de gérer facilement des
conteneurs grâce à une interface en ligne de commande simple. La création d’une image docker
se fait à travers un fichier nommé Dockerfile. Le Dockerfile est une description exacte de la
constitution de l’application (dépendances, librairies, artefacts obtenus après le build de
l’application, etc.).
L'étape de la livraison continue consiste à publier dans un référentiel, les artefacts obtenus
à l’étape de l’intégration continue. Elle permet d’avoir un historique des différentes versions
des applications déployées. L’intégration continue nous livre des images des différents
microservices de la plateforme. Ces images sont publiées dans le dépôt d’images de
l’entreprise. Comme exemple de système de gestion d'artefacts nous pouvons citer docker
Hub, Nexus. Docker Hub permet de stocker des images docker en ligne dans des registres.
C’est le système de gestion d'artefacts que nous utilisons.
29
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
et d’effectuer des actions sur ces derniers. Comme orchestrateur on peut citer docker swarm,
kubernetes.
de l’etcd qui est une base de données contenant les informations du cluster kubernetes.
Les «worker nodes» sont les nœuds d'exécution des conteneurs. Sur ces nœuds tournent :
30
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
Nous déploierons donc les images des microservices sur un cluster Kubernetes. Ainsi nous
pourrons gérer les conteneurs en cours d’exécution.
b) La culture GitOps
GitOps est un ensemble de bonnes pratiques qui consiste à décrire exactement l’état
voulu de l’environnement de déploiement dans des fichiers placés dans un dépôt Git. Il s’agit
de faire de Git le référentiel permettant de connaître la description exacte de l’environnement
de déploiement, par exemple les images à déployer, le nombre de conteneurs qui doivent être
déployés, etc. Ainsi on a un historique des différents états voulus des environnements. On peut
ainsi revenir à un état précédent en cas de bug survenu en production.
Comme outil implémentant les pratiques GitOps nous pouvons citer: Flux et Argo CD.
Flux est un opérateur kubernetes qui permet de synchroniser les manifestes kubernetes
contenus dans le dépôt Git. Il détecte s’il y’a des modifications dans ces manifestes à chaque
commit sur la branche indiquée et met à jour le cluster kubernetes. Il est relié à docker Hub et
charge les nouvelles images que l’on souhaite déployer. La figure 11 montre le fonctionnement
de Flux que nous avons décrit.
31
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
Nous avons défini les technologies et outils que nous utilisons pour réaliser la chaîne
CI/CD. Les diagrammes d’activités illustrés par les figures 12 et 13 donnent des
représentations graphiques des différentes actions effectuées lors du déroulement du pipeline
CI/CD. En bleu est représentée la chaîne d’intégration continue, en orange la livraison continue
et en rouge le déploiement continu.
32
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
33
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
L’architecture logicielle permet de voir comment les outils choisis intègrent la chaîne
CI/CD proposée. La figure 14 présente cette architecture logicielle.
34
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
35
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
cloud-projet qui gère les demandes de création de projets pour déployer après un
site web et/ou une base de données.
Le code de chaque microservice est sur un dépôt GitHub portant le même nom que le
microservice. La chaîne CI/CD définie sera intégrée dans chacun de ces dépôts.
Pour illustrer l’intégration de la chaîne CI/CD mise en place, nous allons travailler avec
le microservice cloud-dashboard.
Sur cet environnement seront déployés les microservices qui constituent la plateforme SaaS
ainsi que les données des utilisateurs telles que leurs sites web et leurs bases de données. La
figure 15 représente l'architecture de l’environnement de développement.
36
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
Le cluster dispose d’un réseau virtuel nommé VPC (Virtual Private Cloud) subdivisé en
deux sous-réseaux, un privé et un public. Les opérateurs effectuent des actions sur les noeuds
situés dans le sous-réseau privé en passant par le sous-réseau public. Cette interaction se fait
grâce à une suite de composants que sont :
l’Internet Gateway (IGW) qui fournit des adresses IP Elastic utilisées pour permettre
les connexions SSH entrantes dans les sous-réseaux ;
le Network Elastic Load Balancer (ELB) qui répartit les requêtes sur des cibles
définies ;
37
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
Le bastion host qui fournit un accès sécurisé aux instances situées dans le sous-réseau
privé ;
Le NAT Gateway qui autorise les accès internet sortants pour les noeuds situés dans le
sous-réseau privé.
Le composant ingress placé dans le VPC permet de garantir l’accès externe aux services
déployés dans les noeuds Kubernetes. C’est donc grâce à ce composant que les utilisateurs
pourront avoir accès aux services de la plateforme SaaS.
a) Le gitflow
Il est important de définir l’organisation des branches dans le dépôt GitHub. Cette
organisation est connue sous le terme de gitflow. Un gitflow définit un modèle de création de
branches ; il permet d’assigner un rôle spécifique à chaque branche et de définir les interactions
entre ces branches.
38
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
Dev : sur cette branche sont fusionnés les codes des différentes fonctionnalités de
la plateforme. Le code de cette branche est testé dans l’environnement de
développement ;
Release : une fois que toutes les nouvelles fonctionnalités de la branche dev sont
testées et prêtes à être déployées, une nouvelle release est créée (4). Ainsi cette
branche contient l’historique des versions de l’application déployée en production ;
39
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
Le webhook a été configuré au niveau des branches de dev, release et master sur chaque
dépôt pour déclencher automatiquement des builds au niveau de Jenkins à chaque fois que du
code est poussé sur ces branches. Ces trois branches sont également protégées ; pour y pousser
du code, il faut une validation d’au moins un développeur.
40
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
Jenkins est un serveur d’intégration continue extensible, nous pouvons ajouter les extensions
nécessaires pour connecter Jenkins aux outils CI/CD de la chaîne. Pour intégrer le scan de code
sur Jenkins, il faut installer sur celui-ci le plugin « SonarQube scanner ». Ce plugin permet de
configurer l’analyse du code dans le pipeline Jenkins. Il faut aussi indiquer à Jenkins l’adresse
du serveur SonarQube ainsi que le token de connexion au serveur. Ainsi Jenkins peut
déclencher l’analyse de code. Cette analyse se fait en se référant au fichier sonar-
project.properties défini dans le code du microservice. Ce fichier contient les paramètres
d’analyse du code tels que l’adresse du serveur SonarQube, le nom du projet, éventuellement
les fichiers à exclure lors de l’analyse du code, etc.
41
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
a) Le Jenkinsfile
Une fois toutes les configurations faites sur Jenkins, nous pouvons dérouler la chaîne
d’intégration continue. Jenkins permet de définir les étapes d’une chaîne d'intégration
continue dans un fichier texte nommé Jenkinsfile. Ce fichier est mis dans le dépôt Git et
Jenkins le détecte automatiquement à chaque fois qu’il reçoit le code. Il exécute alors les étapes
définies dans ce fichier comme l'exécution des tests, la compilation, etc.
Pour chaque microservice, nous avons créé au niveau de Jenkins un projet de type
«pipeline multi branches». Ce type de projet permet de repérer les différentes branches
présentes au niveau du dépôt Git et d’effectuer des builds sur celles-ci. Nous avons également
indiqué sur ces projets le lien vers les microservices sur GitHub. Ainsi Jenkins peut
automatiquement récupérer le code sur de ces microservices à chaque fois que le webhook est
déclenché.
Sur le Jenkinsfile, on définit les actions à effectuer pour des branches définies. A titre
d’illustration, pour le microservice cloud-dashboard les étapes du Jenkinsfile sont les
suivantes :
Vérifier si la branche en cours de build est soit la branche dev, release ou master ;
42
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
Taguer l’image avec le numéro de build Jenkins et un suffixe latest permettant ainsi
de gérer l’historisation ;
Il faut noter que l'exécution du Jenkinsfile est linéaire et un échec à une étape fait
échouer la chaîne d'exécution.
b) Le Dockerfile
Le Dockerfile permet de conteneuriser le microservice. La figure 21 représente le
Dockerfile créé du microservice cloud-dashboard.
43
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
Sur ce Dockerfile, nous partons d’une image node qui permet d’exécuter les commandes
npm. Nous définissons un répertoire de travail et pour préciser que le build de l’application est
pour l'environnement de dev, la variable ENVIRONMENT est mise à dev. Le fichier
package.json contenant l’ensemble des dépendances de l’application est copié dans le
conteneur node. Les dépendances sont ensuite installées avec la commande npm install. Le
code est copié dans le conteneur node puis il est compilé. Le résultat de la compilation d’une
application angular se trouve dans le dossier dist. Pour démarrer le microservice, il faut un
serveur web d’où l’utilisation du conteneur nginx. Le dossier dist obtenu est copié dans le
dossier de base du conteneur nginx : « /usr/share/nginx/html ». Nous remplaçons enfin les
configurations par défaut de nginx par les configurations que nous avons définies dans le fichier
nginx.conf.
Les étapes définies dans ce fichier permettent donc d’embarquer tous les fichiers
nécessaires à l'exécution de l’application.
Pour les autres microservices développés avec Jhipster ou avec Golang, les étapes du
Jenkinsfile sont les mêmes. Cependant pour les microservices développés avec Jhipster, le
framework permet d’embarquer une dépendance docker qui permet de générer directement une
image docker. Pour ces microservices, nous avons défini un Makefile contenant une liste de
44
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
commandes à exécuter. Ce fichier contient les commandes permettant d’effectuer les tests, de
compiler les microservices et de créer l’image correspondant au microservice. Le Jenkinsfile
fait appel à ce fichier à la place du Dockerfile dans ce cas. Pour illustrer cela, nous avons mis
en annexe le Jenkinsfile et le Makefile du microservice cloud-CMS.
45
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
Nous créons donc un répertoire nommé “workloads” sur lequel nous définissons les
manifestes kubernetes que l’on souhaite déployer. Ces manifestes contiennent la description
de l’état voulu du cluster kubernetes. Nous avons créé dans ce répertoire un fichier
deployment.yaml. Ce fichier décrit l’état du cluster avec des informations comme le nom du
conteneur, l’image à déployer, le nombre de conteneurs à déployer, la quantité de ressources
(CPU et mémoire RAM) que chaque conteneur doit utiliser, ainsi qu’un service permettant
d’exposer les conteneurs pour des accès externes.
46
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 3 : CONCEPTION DE LA SOLUTION
Flux est synchronisé avec le répertoire workloads des microservices et détecte tous les
changements effectués dans ces fichiers à chaque commit sur la branche dev. Il applique les
changements détectés au niveau du cluster Kubernetes.
Ainsi nous avons pu automatiser le déploiement des microservices grâce à flux. Les
étapes de configuration de la chaîne CD définies pour le microservice cloud-dashboard sont les
mêmes pour les autres microservices.
Dans ce chapitre, nous avons pu définir la chaîne CI/CD adoptée ainsi que les outils
permettant de le réaliser. Ensuite nous avons pu montrer les étapes de la mise en œuvre de
cette chaîne.
47
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 4 : RESULTATS OBTENUS
CHAPITRE 4
RESULTATS OBTENUS
Nous allons présenter les artefacts obtenus lors de la mise en place de la chaîne CI/CD.
Nous présenterons d’abord les résultats obtenus lors de la phase d’intégration continue ensuite
ceux obtenus lors de la livraison continue et du déploiement continu.
Nous allons illustrer ces résultats avec le microservice cloud-dashboard.
Au moment de la mise en place de la chaîne CI/CD, les microservices ne sont pas prêts
à être déployés. Cependant la chaîne d’intégration continue est entièrement mise en place.
Quant à la chaîne de déploiement continu, nous avons utilisé un cluster kubernetes temporaire
pour pouvoir implémenter cette dernière étape.
1. Intégration continue
1.1.SonarQube
SonarQube analyse et note le taux de couverture du code, les duplications de code, la
maintenabilité, la fiabilité et la sécurité du code. Une note inférieure aux valeurs définies
entraîne un échec du scan du code.
48
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 4 : RESULTATS OBTENUS
SonarQube indique la partie du code contenant des bugs, des vulnérabilités, des
duplications de codes, etc. Ainsi, le code peut être amélioré en toute facilité.
Après cette phase, une image docker est créée à partir du Dockerfile défini.
49
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 4 : RESULTATS OBTENUS
2. Livraison continue
Une fois les images générées, elles sont nommées selon le microservice et taguées avec
le numéro du commit pour cloud-CMS, cloud-BDD, cloud-K8S ou le numéro du build sur
Jenkins pour le microservice cloud-dashboard. Elles sont ensuite automatiquement publiées sur
docker Hub.
50
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 4 : RESULTATS OBTENUS
3. Déploiement continu
51
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 4 : RESULTATS OBTENUS
local d’un fichier kubeconfig qui contient des informations sur le cluster. Ainsi on peut obtenir
des informations sur le cluster comme l’ensemble des namespaces, les conteneurs en exécution
dans ces namespaces ainsi que leur état.
52
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 4 : RESULTATS OBTENUS
En outre, Flux charge bien l’image indiquée sur le fichier de déploiement mais aussi
récupère la liste des images sur le registre Docker Hub (cf. figure 32).
Ces conteneurs déployés sont accessibles grâce au service mis en place (cf. figure 33).
Ce service permet aux utilisateurs d'accéder aux dashboards du projet cloud-souverain, illustrés
par les figures 34 et 35.
53
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 4 : RESULTATS OBTENUS
54
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 4 : RESULTATS OBTENUS
Les objectifs au départ de ce projet étaient d’abord de mettre en place un cloud SaaS qui
permet de déployer des sites web et de stocker des données. Ensuite, il fallait être en mesure
de distribuer facilement cette solution aux entreprises qui possèdent les infrastructures pour la
déployer et qui souhaitent l’exploiter.
Pour le dernier point, la chaîne d’intégration continue est entièrement mise en place ;
pour la chaîne de déploiement continu la conception a été réalisée et les tests effectués. La
création des fichiers de déploiement a été également faite. Nous pourrons déclencher le
déroulement de la chaîne CD sur les environnements définitifs.
Pour le second objectif, une fois les développements finis, les techniques mises en place
lors de la création de la chaîne d’intégration continue et de déploiement continu
permettent d'obtenir des artéfacts prêts à être facilement déployés quel que soit
l’environnement. Nous pouvons donc dire que le second objectif est atteint sous réserve de la
fin des développements.
D’autre part, il lui permet de répondre rapidement aux besoins des utilisateurs grâce
notamment à l’implémentation de la chaîne CI/CD.
55
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CHAPITRE 4 : RESULTATS OBTENUS
56
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
CONCLUSION
Dans le cadre d’un stage de fin d’études effectué au sein de l’entreprise BeOpenIT, nous
avions comme tâche la « mise en place d’un cloud-souverain : implémentation de la chaîne
CI/CD. »
Le premier objectif était de mettre en place une plateforme SaaS qui permet de créer et
de déployer facilement des sites web avec le CMS WordPress, et des bases de données de type
MySql. Cet objectif implique d’assurer les développements d’une telle plateforme ainsi que
son déploiement dans un environnement cloud.
Ensuite le second objectif était d'assurer la portabilité de cette plateforme SaaS pour
qu’elle puisse être distribuée aux entreprises qui souhaitent la déployer.
Pour atteindre ces objectifs, nous avons combiné l’agilité avec la méthode SCRUM et le
DevOps comme méthodes de développement du projet.
En nous basant sur l’analyse des besoins fonctionnels effectuée dans le chapitre 2 nous
avions pu dégager deux tâches majeures à réaliser :
Une autre perspective serait d’étendre le catalogue des bases de données et CMS proposé
en intégrant les bases de données de type PostgreSql et le CMS Drupal.
57
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
BIBLIOGRAPHIE
58
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
ANNEXES
Pour effectuer les tests, le build et la conteneurisation des microservices développés avec
Jhipster, un Makefile a été défini. Ce Makefile sera utilisé dans le Jenkinsfile pour connaître
les étapes du pipeline à suivre.
59
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
Jenkins va exécuter ce Makefile grâce au Jenkinsfile. Le Jenkinsfile est subdivisé en étapes
appelée «stage».
60
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE
61
Mise en place d’un cloud souverain : implémentation de la chaîne CI/CD
Justine Marie Téning FAYE