Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Soutenu le : 12/07/2018
Devant le jury :
Président : Mr. BAHROUN Sahbi
Rapporteur : Mr. SEDDIK Hassene
Encadrant à l’UVT : Mr. ESSAFI Adel
Encadrant professionnel : Mr. Mwelhi Ramzi
Année Universitaire : 2017 / 2018
Dédicace
A mon père
Aucune dédicace ne saurait exprimer l’amour, l’estime, le dévouement et le respect que
j’ai toujours eu pour vous.
Rien au monde ne vaut les efforts fournis jour et nuit pour mon éducation et mon bien
être.
Ce travail est le fruit de tes sacrifices que tu as consentis pour mon éducation et ma
formation.
A ma chère mère
Affable, honorable, aimable : Tu représentes pour moi le symbole de la bonté par
excellence, la source de tendresse et l’exemple du dévouement qui n’a pas cessé de
m’encourager et de prier pour moi.
Aucune dédicace ne saurait être assez éloquente pour exprimer ce que tu mérites pour
tous les sacrifices que tu n’as cessé de me donner depuis ma naissance, durant mon enfance et
même à l’âge adulte.
A mon frère et mes sœurs
Les mots ne sont pas suffisants pour exprimer l'amour, l’attachement, la tendance et
l'affection que je porte pour vous. Je vous dédie ce travail avec tous mes vœux de bonheur, de
santé et de réussite.
A tous mes amis
Que je les adore et tous mes enseignants que je les respecte A tous ceux m`aiment et
souhaitent mon bonheur et ma réussite.
A tous ceux qui me sont chers, je dédie ce travail.
Remerciements
C’est avec un grand plaisir que je réserve cette page en signe de gratitude et de profonde
reconnaissance à tous ceux qui ont apporté l’assistance nécessaire au bon déroulement de ce
travail.
Je tiens à remercier dans un premier lieu mon encadrant professionnel, Mr. MOUELHI
Ramzi, non seulement pour son support continu, ses précieux conseils, son professionnalisme,
le temps qu’il m’a accordé sachant qu’il était toujours là pour répondre à mes interrogations,
mais aussi pour ses qualités morales, son extrême modestie et son accueil chaleureux, ce qui
m’a facilité la tâche d’intégration au sein de l’entreprise. Merci beaucoup.
Mes vifs et spéciaux remerciements s’adressent à mon encadrant académique, Mr. ESSAFI
Adel, pour ses qualités d’encadrement, ses remarques pertinentes, ses encouragements
continus, son soutien, son patience, ses efforts et son disponibilité. Qu’il trouve dans ce travail
l’expression de mon respect et mon infinie reconnaissance.
Mes remerciements les plus distingués sont adressés ensuite aux membres du jury qui
m’ont fait l’honneur de bien vouloir accepter d’évaluer mon travail.
Table des matières
Introduction générale............................................................................................................................... 1
Chapitre 1 : Contexte général du projet ................................................................................................... 2
1.1. Introduction ............................................................................................................................. 3
1.2. Présentation de l’entreprise : ........................................................................................................ 3
1.2.1. Historique .............................................................................................................................. 3
1.2.2. Vision et mission : ................................................................................................................. 3
1.2.3. Les valeurs ............................................................................................................................. 4
1.2.4. Les services ........................................................................................................................... 4
1.2.5. Les solutions .......................................................................................................................... 5
1.2.6. Les partenaires :..................................................................................................................... 5
1.3. Cadre du projet ............................................................................................................................. 6
1.3.1. Etude de l’existant ................................................................................................................. 6
1.3.2. Limite de l’existant ................................................................................................................ 6
1.3.3. Solutions proposées ............................................................................................................... 7
1.3.4. Architecture générale de la solution ...................................................................................... 7
1.4. Conclusion .................................................................................................................................. 11
Chapitre 2 : État de l’art ........................................................................................................................ 12
2.1. Introduction ................................................................................................................................ 13
2.2. Intégration continue .................................................................................................................... 13
2.2.1. Définition de l’intégration continue .................................................................................... 13
2.2.2. Fonctionnement de l’IC ....................................................................................................... 13
2.2.3. Les étapes de l’Intégration Continue ................................................................................... 14
2.2.4. Les différents composants d’une plate-forme d’IC: ............................................................ 15
2.2.5. Les avantages de l’intégration continue.............................................................................. 15
2.3. La virtualisation.......................................................................................................................... 16
2.3.1. Principe................................................................................................................................ 16
2.3.2. Intérêts ................................................................................................................................. 17
2.3.3. Catégories de virtualisation ................................................................................................. 17
2.3.4. Présentation de l’Hyperviseur ............................................................................................ 18
2.4. Solutions de virtualisation .......................................................................................................... 19
2.5. Technologie Docker ................................................................................................................... 20
2.6. Etude comparative : .................................................................................................................... 21
2.6.1. Gestionnaire de version : Git vs SVN ................................................................................. 21
2.6.2. Serveur d’orchestration : Jenkins vs Bamboo vs Travis ...................................................... 23
2.6.3. Serveur de gestion de dépôt maven : Nexus vs JFrog Artifactory.................... 24
2.6.4. Sonarqube vs SonarLint ...................................................................................................... 25
2.6.5. La différence entre les conteneurs et les machines virtuelles .............................................. 25
2.7. Choix de solution de virtualisation : ....................................................................................... 26
2.8. Les scripts YAML et Groovy ..................................................................................................... 26
2.9. Conclusion .................................................................................................................................. 27
Chapitre3 : Réalisation .......................................................................................................................... 28
3.1. Introduction ................................................................................................................................ 29
3.2. Réalisation technique et environnement ..................................................................................... 29
3.2.1. Environnement de travail .................................................................................................... 29
3.2.2. Première connexion au serveur : ......................................................................................... 30
3.2.3. Manipulation technique via docker et docker-compose : .................................................... 34
3.2.4. Configuration avancé de jenkins : ....................................................................................... 38
3.3. Réalisation fonctionnelle ....................................................................................................... 41
3.4. Conclusion :........................................................................................................................... 49
Conclusion générale .............................................................................................................................. 50
Liste des Références .............................................................................................................................. 51
Annexe .................................................................................................................................................. 52
Table des figures
Figure 1: Logo Yess Consulting ................................................................................................................ 3
Figure 2: Les partenaires de Yess Consulting ......................................................................................... 5
Figure 3: Architecture existante .............................................................................................................. 6
Figure 4: Logo SVN ................................................................................................................................ 7
Figure 5: Logo jenkins ............................................................................................................................ 8
Figure 6: Logo sonarqube........................................................................................................................ 8
Figure 7: Logo nexus............................................................................................................................... 9
Figure 8: Logo diagramme de composants ............................................................................................. 9
Figure 9: Diagramme de déploiement ................................................................................................... 10
Figure 10: Architecture à mettre en place ............................................................................................. 11
Figure 11: Les étapes de l'intégration continue ..................................................................................... 14
Figure 12: Fonctionnement de plusieurs machines virtuelles sur une machine physique ..................... 16
Figure 13: Hyperviseur de type 1 .......................................................................................................... 18
Figure 14: Hyperviseur de type 2 .......................................................................................................... 19
Figure 15: Différence entre Machine Virtuelle et Docker ..................................................................... 26
Figure 16: Première connexion au serveur ............................................................................................ 30
Figure 17: Accès au serveur avec putty ................................................................................................. 30
Figure 18: Paramètre docker-compose pour jenkins ............................................................................. 32
Figure 19: Paramètres docker-compose pour sonar .............................................................................. 33
Figure 20: Paramètres docker-compose pour mysql ............................................................................. 33
Figure 21: Paramètres docker-compose pour nexus .............................................................................. 34
Figure 22: Répertoire du lancement de la plateforme ........................................................................... 35
Figure 23: Lancement de la plateforme ................................................................................................. 35
Figure 24: Liste des images docker téléchargées .................................................................................. 36
Figure 25: Suppression de la plateforme ............................................................................................... 36
Figure 26: Liste des composants par docker-compose .......................................................................... 37
Figure 27: Liste des composants par docker engine .............................................................................. 37
Figure 28: Installation du maven dans jenkins ...................................................................................... 37
Figure 29: Copie du mot de passe de verrouillage de jenkins ............................................................... 38
Figure 30: Création du premier utilisateur jenkins ................................................................................ 38
Figure 31: Configuration jenkins-sonarqube ......................................................................................... 39
Figure 32: Interface jenkins pour soumettre un plugin.......................................................................... 39
Figure 33: Création d'un utilisateur nexus sous jenkins ........................................................................ 40
Figure 34: Configuration jenkins-nexus ................................................................................................ 40
Figure 35: Interface principale de jenkins ............................................................................................. 41
Figure 36: Création d'un nouveau projet jenkins ................................................................................... 41
Figure 37: Script groovy pour le pipeline jenkins ................................................................................. 42
Figure 38: Création d'un utilisateur SVN pour le téléchargement du projet ........................................ 43
Figure 39: Téléchargement du projet YessClever depuis SVN ............................................................. 43
Figure 40: Log correspond au stage du téléchargement ........................................................................ 44
Figure 41: Vérification de la bonne installation java ............................................................................ 44
Figure 42: Affichage de la version java ................................................................................................ 44
Figure 43: Stage de la suppression de l'espace du travail ...................................................................... 45
Figure 44: Sortie de la console pour le stage « clean » ......................................................................... 45
Figure 45: Compilation du code source................................................................................................. 46
Figure 46: Scan du projet avec sonarqube ............................................................................................. 46
Figure 47: Déroulement du stage SonarQube Scan ............................................................................... 46
Figure 48: Interface sonarqube pour le projet YessClever .................................................................... 47
Figure 49: Génération du livrable.......................................................................................................... 47
Figure 50: Envoi du livrable vers nexus ................................................................................................ 48
Figure 51: Livrable sous nexus.............................................................................................................. 48
Liste des Tableaux
Habituellement la mise en production d’une application est l’étape ultime d’un processus
bien élaboré faisant intervenir des équipes différentes, à savoir l’équipe de développement et
celle des tests. Ainsi, le développement, le test et la mise en production sont considérés comme
trois étapes distinctes.
Faire intervenir autant d’équipes peut mener à des conflits puisque le but de chaque
équipe est différent de l’autre. Quand les développeurs souhaitent innover et faire évoluer les
applications, l’équipe production cherche, avant tout, à maintenir la stabilité du système
informatique. D’ailleurs, chacun suit ses processus, et travaille avec ses propres outils qui sont
rarement communicants. En conséquence, les relations entre ces équipes peuvent être
conflictuelles. Ces conflits génèrent des retards de livraison, des coûts supplémentaires pour
l’entreprise qui n’ont pas été prévu au départ, avec un impact sur le client dont sa satisfaction
est le centre des préoccupations de l’entreprise.
Il devient alors évident qu’il faut adopter une nouvelle approche qui permet d’unifier le
processus de développement et de production afin d’éviter tous les problèmes cités
précédemment.
De ce fait, la notion de DevOps est née. Il s’agit d’une approche qui se base sur la
synergie entre la partie opérationnelle et la partie production. L’alignement de l’ensemble des
équipes du système d’information sur un objectif commun permet de réduire les conflits entre
ces différents intervenants, d’éviter les retards dus à la communication entre eux, et d’améliorer,
par conséquent, les délais des livraisons (Time-To-Market). C’est dans ce cadre que s’inscrit
notre Projet de Fin d’Etude au sein de la société Yess Consulting, il s’agit de mettre en place
une plateforme DevOps pour l’intégration continue du produit Yess Consulting, YessClever.
• Le deuxième volet est consacré pour la définition des concepts de base de notre projet.
1
Chapitre 1 : Contexte général du projet
2
Chapitre 1 : Contexte général du projet
1.1. Introduction
Le présent chapitre a pour objectif de mettre le projet dans son cadre général à savoir
l'entreprise accueillante. Par la suite, nous enchainerons avec l’étude de l’existant puis nous
proposons la solution adéquate pour faire face à l’existant ainsi qu’une idée sur l’architecture
générale de la solution à mettre en place.
Elle cherche à fournir à ses clients des logiciels fiables et supérieurs à un prix abordable
tout en faisant du processus de développement une expérience agréable pour les clients et les
employés. [1]
3
1.2.3. Les valeurs
La réussite d’un projet repose principalement sur la qualité de l’équipe projet. La compétence
des consultants, leurs qualités humaines et la synergie du groupe constituent les clés du succès.
C’est la raison pour laquelle ils tiennent à ce que chaque collaborateur respecte et véhicule les
valeurs de Yess Consulting :
Promettre moins mais livrer plus.
Fournir des estimations d'effort honnêtes et un horaire de travail
Assurer la transparence grâce à une communication proactive
Travailler avec des clients qui sont eux-mêmes réussis et justes
Construire des relations basées sur la confiance et le respect mutuel
Embaucher et promouvoir en fonction du mérite et de la performance
Inciter les employés à faire ressortir leur meilleur
Ne faites jamais de discrimination - toujours un employeur offrant des chances égales
1.2.4. Les services
Yess Consulting fournie à ses clients quatre services :
AMOA
Yess Consulting conçoit des sites Web et des applications mobiles faciles à utiliser et
à mettre à niveau. Son but: aider les clients à concevoir des produits et des entreprises qui
génèrent un bénéfice net
Développement
Yess Consulting conçoit, développons et fournit des applications natives de haute
qualité. Elle identifie et développe la meilleure solution pour les besoins techniques et les défis
commerciaux les plus difficiles des entreprises, faciles à mettre à jour. Sa sélection de systèmes
de gestion de contenu est robuste, sécurisée et conviviale
4
ERP
ERP Développe l’entreprise de manière plus intelligente, plus rapide et plus fiable
grâce à un ERP de meilleure pratique moderne qui inclut tous les besoins du client. SIRH, CRM,
SI (Stock Inventory), Comptabilité
1.2.5. Les solutions
La mission de Yess Consulting est de soutenir les entreprises vers l'excellence en
répondant aux besoins de l'analyse, la simplification et l'optimisation des processus à la
planification et à la gestion de toutes les ressources: Humains, Produits, Clients, médias et
Finance.
Le produit YessClever se concentrer sur les besoins du client en termes de : gestion des
ressources humaines, gestion de la production et des stocks, gestion des relations clients et
gestion des affaires.
Le YessClever ERP est disponible en deux modes SaaS et sur permise assure:
Gestion du temps et des activités
Gestion de la relation client (CRM)
Gestion des talents
Gestion de la comptabilité financière (multi-sociétés, multi-devises, multi-langues)
1.2.6. Les partenaires :
Epic consulting
Telecontrol Detection System (TDS)
Global Innovative Consulting
Arts
5
1.3. Cadre du projet
1.3.1. Etude de l’existant
Yess consulting suit une procédure classique dans la gestion de ses projets, en effet l’équipe
DEV met l’accent sur le développement des fonctionnalités.
L’équipe passe par une partie conceptuelle du produit, puis développe le code, en faisant des
tests en local, et enfin génère le livrable pour ses clients.
Le produit tourne sur un serveur applicatif Tomcat avec une base de donné postgresql, et un
serveur web nginx.
Ça reste toujours des lacunes devant les ambitions d’une jeune entreprise qui vise un grand
marché non seulement sur l’Afrique mais aussi sur l’Europe
6
1.3.3. Solution proposée
Pour faire face aux limites mentionnées ci-dessus, Yess Consulting nous a confié la tâche de
l’étude et la mise en place d’une plateforme d’intégration continue.
Le moteur d’intégration continue jenkins, va être lié au serveur de gestion de version "SVN".
La plateforme que nous allons mettre en place est composée d’un serveur gestionnaire de
source : SVN, un orchestrateur d’intégration continue : Jenkins, un serveur de qualité de code :
Sonar et un serveur gestionnaire de dépôt : Nexus.
SVN
Ce serveur est mis en place par l’entreprise accueillante, nous l’avons branché avec notre
solution proposée pour gérer le cycle de vie du produit YessClever.
Les développeurs ont mis le code source du projet sous ce serveur, à chaque fois qu’il y’a un
nouveau code, le développeur concerné met à jour le code sur le serveur SVN.
Le serveur SVN est lié directement avec le moteur de l’intégration continue Jenkins.
7
Jenkins
L’intégration continue se repose sur ce serveur, il gère tous les composants de l’architecture
mise en place. Il est flexible ce qui permet de l’adapter avec plusieurs outils.
Nous choisissons Jenkins entre plusieurs autres outils, car il est le leader du marché de
l’intégration continue, c’est le plus utilisé, et il offre plusieurs fonctionnalités permettant de
bien gérer les applications.
Dans notre architecture, Jenkins télécharge le code source après chaque modification,
détectée sous le serveur SVN, puis il s’occupe de terminer le cycle de vie de l’application.
Sonar
Sonar est choisi comme serveur de qualité, il analyse code source et puis génère un rapport
détaillé contenant plusieurs informations : nombre de lignes de code, pourcentage de couverture
de code par les tests unitaires et nombre de violations de règles de codage.
Les tests réalisés par Sonar sont lancés par Jenkins automatiquement à chaque nouveau
cycle de vie.
Sonar peut mettre les statuts du cycle en état « FAILURE » si la couverture du code n’atteint
pas le pourcentage spécifié.
8
Nexus
Cet outil sert à conserver les différentes versions générées par Jenkins après chaque
lancement en état « SUCCESS », qui sont par la suite téléchargées et exploitées par les autres
environnements tels que l’environnement QA et l’environnement production.
Jenkins peut automatiser le déploiement des artefacts sauvegardés dans Nexus, sous des
serveurs applicatifs qui sont déployés dans des containers docker légers.
A travers ce diagramme, nous présentons l’ensemble des composants qui forme notre
plateforme, ainsi que l’enchainement des actions entre eux.
9
Ce diagramme illustre l’enchainement des actions les plus importante réalisées par notre
pipeline, en effet chaque développeur travaille dans son local, pour chaque nouvelle
modification du code, il fait un commit vers le gestionnaire du code source.
Lorsque nous lançons un Build sous Jenkins, ce dernier télécharge le code source depuis
SVN, le compile puis le scanne avec Sonarqube et enfin envoi la livrable générée vers le serveur
de dépôt Nexus.
Diagramme de déploiement
10
Le diagramme de la figure 9, illustre toutes les étapes de déploiement de la plateforme
d’intégration continue.
Avec l’intégration continue nous souhaitons que les équipes R&D détectent les problèmes le
plutôt possible, c’est-à-dire, dès que le code soit écrit et non pas à quelques jour de la livraison.
1.4. Conclusion
Au cours de ce premier chapitre, nous avons commencé par présenter l’organisme
d’accueil Yess Consulting. Par la suite nous avons étudié l’existant en citant ses limites puis
nous avons expliqué la solution proposée en présentant son architecture. Nous détaillerons dans
le chapitre suivant clairement la notion de l’intégration continue, la virtualisation traditionnelle
et la migration vers la nouvelle technologie Docker.
11
Chapitre 2 État de l’art
12
Chapitre 2 État de l’art
2.1. Introduction
Nous commençons ce chapitre par la mise en évidence des différentes notions de base
pour la réalisation de notre projet. Nous abordons le concept de l’intégration continue avec son
fonctionnement et ses composants, puis nous expliquons la notion de virtualisation ainsi que sa
nouvelle solution Docker.
Le principal but de cette approche est d’anticiper et d’identifier rapidement les bugs
avant la mise en production du logiciel. Ce qui permet d’avoir une vision plus complète du
logiciel, notamment sur les différents points faibles et points forts du code ou de l’équipe. Ceci
permet de gagner en réactivité pour faire face aux différents problèmes pouvant être présents
dans les diverses phases du projet.
13
Chapitre 2 État de l’art
En cas d’échec, une notification est générée au chef de projet et/ou à l’équipe de
développement. Le développeur concerné par l’erreur fait un update du référentiel de gestion
de configuration et corrige l’anomalie.
14
Chapitre 2 État de l’art
Le compilateur : c’est l’outil qui permet de traduire le code source (par exemple, du C)
en langage compréhensible par la machine, ou par un interpréteur. Il en existe des
milliers, les plus connu étant GCC et le JDK.
Les tests unitaires : ce composant permet d’effectuer et de jouer l’ensemble des tests
unitaires définis dans un projet.
Le contrôle qualité : ce composant est chargé d’assurer la qualité du code en fonction
de plusieurs paramètres. L’outil le plus classique est SonarQube
Le dépôt de binaire : ce composant permet le stockage des différentes versions d’un
projet après compilation. Il peut aussi servir comme source pour des composants utilisés
dans son propre projet. L’outil Nexus peut servir comme moyen de dépôt binaire.
2.2.5. Les avantages de l’intégration continue
L’intégration continue à de nombreux avantages et qualités, tant en matière de
développement, qu’en termes d’amélioration d’organisation de projet. Par exemple, la détection
d’erreurs est faite plus rapidement tout en réduisant ainsi le délai nécessaire pour les corriger.
Par conséquent, plus tôt une erreur est corrigée, moins la qualité du code final sera impactée.
Outre que cet aspect, les bénéfices sont nombreux.
Améliorer la productivité des développeurs qui passent moins de temps à corriger des
bugs, ceux-ci sont repérés et corrigés plus rapidement, grâce à l’utilisation des tests
unitaires.
Amélioration de la visibilité sur le projet via un système de versions.
Livrer plus rapidement des versions et des mises à jour.
Meilleure intégration des applications aux environnements existants.
15
Chapitre 2 État de l’art
2.3. La virtualisation
La virtualisation c’est le fait de rendre logique une ressource technique ou physique dans le
but d’optimiser l’utilisation des ressources et de réduire l’adhérence entre ces éléments. La
virtualisation est une technologie de plus en plus incontournable, elle a été la première pierre
vers l’ère du Cloud Computing. Bien que cette notion ne soit pas nouvelle, les évolutions
quotidiennes au niveau des systèmes et des ressources mémoires offrent aujourd’hui un terrain
fertile pour le développement rapide des solutions de virtualisation.
2.3.1. Principe
La virtualisation consiste à utiliser des moyens techniques (matériels et/ou logiciels)
afin de faire fonctionner un ou plusieurs systèmes d’exploitation et/ou application sur un seul
ordinateur comme s’ils fonctionnaient sur des ordinateurs distincts. Elle permet principalement
une grande modularité dans la répartition des charges, ainsi une reconfiguration des serveurs en
cas d’évolution ou de défaillance temporaire.
Figure 12: Fonctionnement de plusieurs machines virtuelles sur une machine physique
16
Chapitre 2 État de l’art
2.3.2. Intérêts
Les intérêts de la virtualisation sont nombreux nous citons principalement :
Utilisation optimale des ressources d’un parc de machines (réparation des machines
virtuelles sur les machines physiques en fonction des charges respectives).
Installation, déploiement et migration facile des machines virtuelles d’une machine
physique à une autre, notamment dans le contexte d’une mise en production à partir
d’un environnement de qualification ou de pré-production, livraison facilitée.
Economie sur le matériel par mutualisation (consommation électrique, entretien
physique, surveillance, support, compatibilité matérielle, etc.).
Sécurisation et/ou isolation d’un réseau (cassage des systèmes d’exploitation virtuels,
mais pas des systèmes d’exploitation hôtes qui sont invisibles pour l’attaquant, tests
d’architectures applicatives et réseau).
Virtualisation du serveur
L’un des atouts le plus reconnu au niveau de cette catégorie de virtualisation, c’est qu’en cas
de perte totale d’un centre d’hébergement ou en cas d’un évènement exceptionnel il n’y aura
pas un impact dramatique sur l’activité des machines.
Virtualisation du stockage
De point de vue utilisateur, la virtualisation sert à masquer la disparité physique des unités
de stockage et à le présenter comme un unique volume de données logique.
Virtualisation d’application
17
Chapitre 2 État de l’art
Cette technologie impose la gestion des ressources du poste client par un serveur dans le
Datacenter. (Quelque part un retour au client léger). La virtualisation du poste client est un
moyen efficace pour maitriser le cout de possession et simplifier la gestion et le déploiement,
tout en assurant un contrôle constant et en temps réel pour une continuité d’activité optimal.
Un hyperviseur est une application qui prend en charge de la virtualisation logicielle d'un
système d'exploitation. Il gère l'allocation de ressources matérielles réelles aux machines
virtuelles hébergées.
Hyperviseur de type 1
Un hyperviseur de type 1 est un système qui s’installe directement sur la couche matérielle
du serveur. Ces systèmes sont allégés de manière à se « concentrer » sur la gestion des systèmes
d’exploitation invités c’est-à-dire ceux utilisés par les machines virtuelles qu’ils contiennent.
Ceci permet de libérer le plus de ressources possible pour les machines virtuelles.
Parmi les hyperviseurs de type 1 nous trouvons des systèmes comme Xen, VMware ESX et
Proxmox.
18
Chapitre 2 État de l’art
Hyperviseur de type 2
Parmi les hyperviseurs de type 2, nous trouvons VMware Player, VMware Workstation,
Virtual PC et Virtual Box.
Xen : est une solution libre de virtualisation permettant de faire tourner plusieurs
systèmes d'exploitation sur une même machine physique. Il est de type hyperviseur,
c'est à dire qu'il vient s'insérer entre le matériel et le noyau. Xen est considéré comme
une solution à base de para virtualisation, car les systèmes invités doivent être modifiés
pour cohabiter.
19
Chapitre 2 État de l’art
Depuis l’année 2013, une nouvelle solution de virtualisation a été créée nommé « Docker»,
elle a été développé rapidement pour être un grand concurrent des autres solutions dans le
marché de virtualisation surtout VMware.
Docker est une solution de virtualisation légère pour Linux créée en 2013 et possédant
une forte dynamique de développement et de déploiement.
Docker est une plateforme permettant de construire, déployer, et lancer des applications
cloisonnées.
La virtualisation légère de Docker se base sur les fonctionnalités fournies par le kernel
Linux comme les cgroups et les kernel namespaces, permettant de garder des performances
attendues d'un système de virtualisation légère. [5]
20
Chapitre 2 État de l’art
Poids léger
Les conteneurs en cours d'exécution sur une seule machine partagent tous le même
noyau du système d'exploitation afin qu'ils commencent instantanément et de faire une
utilisation plus efficace de la RAM. Les images sont construites à partir de systèmes de fichiers
en couches afin qu'ils puissent partager des fichiers communs, ce qui rend l'utilisation du disque
et de l'image de téléchargements beaucoup plus efficace.
Plateforme
La plateforme Docker est composée de deux éléments :
Le démon Docker qui s’exécute en arrière-plan et qui s’occupe de gérer les conteneurs
Le client Docker qui permet d’interagir avec le démon par l’intermédiaire d’un outil en
ligne de commande
Dans cette partie, nous procédons à une étude comparative entre les différents outils qui
existent sur le marché.
21
Chapitre 2 État de l’art
Contrôle d’accès Nécessité d’un « commit access » due Non nécessite d’un « Commit
au fait de la centralisation. access » puisque le système est
distribué. Il faut juste décider
de fusionner quoi à partir de
quel utilisateur.
22
Chapitre 2 État de l’art
Les branches Les branches sont gérées comme étant un La gestion des branches est assez
autre dossier dans le dépôt du code, elles ne simple, nous pouvons facilement
sont pas historiées. Pour connaître s’il y a eu naviguer entre les différentes
fusion entre des branches, il faut branches d’un même répertoire de
explicitement exécuter une commande. travail. Chaque répertoire de
Cette façon de gérer les branches travail existant chez un utilisateur
démultiplie les chances de créer des est considéré comme une branche.
branches « orpheline». Une fois la fusion est La fusion de la branche inclut les
faite nous ne pouvons plus savoir ce qui a informations suivantes : auteur,
été modifié. heure, date, informations relatives
à la branche et à la révision, les
changements effectués par rapport
à la version antécédente. la fusion
suivante, commence
automatiquement là où la dernière
fusion a été faite.
Jenkins, travis et bamboo sont des outils d’orchestration bien connu sur le
marché, chacun d’entre eux présente ses avantages et ses inconvénients. Le tableau 2
permet de comparer entre ces outils. La comparaison se base sur l’aspect Open source
du code, le nombre de plugins, la simplicité d’utilisation et l’interfaçage avec les différents
outils de gestion de version.
23
Chapitre 2 État de l’art
L’étude comparative entre ces différents serveurs d’orchestration a dirigé notre choix
vers Jenkins, qui, grâce à ses nombreux plugins, permet un interfaçage facile avec de
nombreux outils dont nous avons besoin tel que Nexus et Sonar.
Ci-dessous nous présentons la comparaison entre ces deux outils, notre comparaison
est basée sur :
24
Chapitre 2 État de l’art
Ces données permettent ainsi d'évaluer la qualité du code, et d'en connaître l'évolution
au cours du développement.
Ci-dessous nous présentons la comparaison entre ces deux outils, notre comparaison
est basée sur :
Après cette comparaison, nous avons choisi de travailler avec Sonarqube comme
serveur de qualité de code.
25
Chapitre 2 État de l’art
Machine virtuelle : Chaque machine virtuelle comprend l'application, les binaires et les
bibliothèques nécessaires et tout un système d'exploitation invité - qui peuvent être des
dizaines de GBs taille.
Conteneur : Les conteneurs comprennent l'application et toutes ses dépendances,
mais partagent le noyau avec d'autres conteneurs. Ils fonctionnent comme un
processus isolé dans l'espace utilisateur sur le système d'exploitation hôte.
YAML
Pour le développement des scripts, nous avons utilisés le langage de sérialisation YAML
qui fournit de puissants paramètres de configuration, sans avoir à apprendre un type de code
plus complexe comme CSS, JavaScript et PHP.
26
Chapitre 2 État de l’art
YAML est l’acronyme de «Yet Another Markup Language», il se définit comme étant « un
standard de sérialisation de données pour tous les langages, facile à utiliser pour les humains ».
Standard : car il n’y a pas d’approximation à avoir sur le contenu écrit en YAML.
Sérialisation de données : consiste en la transformation d’une structure de données en
un fichier texte.
Human-friendly : une structure de données écrite en YAML est très simple à lire, facile
à comprendre, et facile à éditer.
Groovy
Groovy est le nom d'un langage de programmation orienté objet destiné à la plate-forme
Java. Il constitue une alternative au langage Java pour cette plate-forme et est inspiré
de Python, Ruby et Smalltalk.
Groovy utilise une syntaxe très proche de Java, avec des accolades, et est
directement compilé, soit à la volée dynamiquement, soit classiquement avec un compilateur
en bytecode.
Groovy s'intègre et est entièrement compatible avec la JVM étant donné que le bytecode est
le même. Il peut donc :
Groovy peut être comparé à BeanShell, l'objectif de faire un langage de scripting proche de
java est le même, la mise en œuvre étant différente.
2.9. Conclusion
Au cours de ce chapitre, nous avons présenté les concepts de base de notre projet, nous
avons définis l’intégration continue, son fonctionnement et ses composants, la virtualisation
avec ses solutions en se focalisant sur la technologie Docker, et enfin nous avons décrit nos
choix concernant les outils de virtualisation ainsi que les types de scripts utilisés qui seront le
noyau de la partie réalisation.
27
Chapitre3 : Réalisation
28
Chapitre 3 Réalisation
Chapitre 3 : Réalisation
3.1. Introduction
Dans le présent chapitre, nous allons présenter nos travaux techniques et fonctionnels
pour mettre en place la plateforme d’intégration continue.
Mémoire installé(RAM) 16 Go
Processeur 4 CPUs
29
Chapitre 3 Réalisation
30
Chapitre 3 Réalisation
Après la connexion sur notre serveur, la première étape sera l’installation de docker et
docker-compose (voir Annexe).
Docker va gérer les images et les conteneurs en ligne de commande, alors que docker-
compose va les gérer en se basant sur un fichier yaml.
Une fois le fichier exécuté par docker-compose, nous créons un environnement formé
de quatre images : docker, jenkins, Nexus, Sonar et mysql.
Il est possible de créer un fichier séparé pour chaque composant de la plateforme, mais
pour assurer la communication entre les composants (seul réseau), et pour faciliter le
déploiement de la solution, nous décidons de mettre toute la configuration de notre plateforme
dans un seul fichier yaml.
Notre yaml est de version 3, il est riche en nouvelles fonctionnalités et nous offre
plusieurs caractéristiques.
Le fichier est composé de quatre parties, chaque partie présente un composant de notre
architecture à mettre en place.
Principe général
Pour déployer une application sous docker, il faut préciser l’image de base, à partir de
laquelle s’instancie le container docker.
Chaque composant doit tourner sur un port précis, du coup il faut le noter dans la
configuration,
Docker permet le mapping des ports entre le système d’exploitation et les containers, ce
qui permet d’éviter les conflits des ports des applications qui tourne directement sur l’OS de
base, et celle qui tournent sur docker.
Il faut partager les données importantes des containers docker avec l’OS, pour permettre
la sauvegarde d’une copie de ces données au cas où le container crache.
31
Chapitre 3 Réalisation
Docker compose permet aussi de mettre les variables d’environnement dans le fichier
yaml.
En commençant à lire le fichier, les deux premières lignes précisent la version du yaml
utilisé ainsi que le mot « services » qui est commun pour tous les composants.
Nous pouvons deviser notre configuration en quatre bloc selon le nombre des services :
Jenkins
Le container jenkins est instancié de l’image officielle jenkins qui se trouve sur le docker-
hub, il tourne sur les ports :
Nous avons partagé le dossier qui contient les données les plus importants (jenkins_home)
sur le Host OS, par contre pour des raisons que nous allons les sitées par la suite, nous avons
partagé le docker.sock du Host OS vers le container Jenkins.
32
Chapitre 3 Réalisation
Sonar
SONAR_JDBC_URL
SONAR_DB_USERNAME
SONAR_DB_PASSWORD
Les données les plus importants pour ce container se trouvent sur /opt/sonar, nous avons
protégé ce répertoire sur le système d’exploitation.
Mysql
Le container mysql est instancié de l’image officielle mysql sur docker-hub, il tourne sur le
port 3306, nous avons passé comme variables d’environnement :
33
Chapitre 3 Réalisation
MYSQL_ROOT_PASSWORD
MYSQL_USER
MYSQL_PASSWORD
MYSQL_DATABASE
Les trois derniers permettent la création de l’utilisateur sonarqube ainsi qu’une base de
données pour le container sonar.
Nexus
Les données sous /nexus-data sont partagées avec notre système d’exploitation.
Comme pour tous les autres composants, nous avons assuré l’haute disponibilité de nexus.
Comme nous l’avons mentionné, docker-compose est l’outil responsable du lancement des
services composant notre architecture.
Pour déployer l’architecture, une seule commande lancée par docker-compose doit mettre
notre plateforme de l’intégration continue en place.
34
Chapitre 3 Réalisation
Les dossiers : jenkins, mysql, nexus-data, sonar et sonatype-work sont les volumes
partagés des containers vers l’hôte.
Après l’exécution de fichier ci-dessus, docker lit les noms des images configurées dans
le fichier et les télécharge depuis le docker hub.
35
Chapitre 3 Réalisation
Docker associe à chaque image un id, il affiche des informations comme la taille, la date de
création et la version de l’image téléchargé.
Grâce aux volumes partagés, rien à perdre dans le cas où nous arrêterons les composants de
notre solution, toutes les données importantes sont sauvegardées dans les dossiers de backup,
Une fois nous lançons de nouveau la plateforme, docker-compose charge le contenu des
volumes dans les containers.
36
Chapitre 3 Réalisation
Nous pouvons aussi lister les containers qui tournent par docker engine comme suit :
La structure du produit YessClever est générée par maven, pour tourner son intégration
continue, il faut installer maven avec jenkins.
La première commande sert à mettre à jour le dépôt APT, alors que la deuxième installe le
package maven.
Configuration de jenkins :
Après l’exécution du script yaml, nous configurons jenkins pour créer le premier utilisateur
administrateur.
37
Chapitre 3 Réalisation
Nous copions par la suite ce mot de passe, pour avoir l’accès e tant qu’administrateur
sur l’interface jenkins.
L’étape suivante est la création du premier utilisateur jenkins avec le rôle l’administrateur.
Après la création de l’utilisateur administrateur, jenkins sera prêt pour passer à une autre
phase de configuration plus avancée.
38
Chapitre 3 Réalisation
Dans l’interface ci-dessous, nous configurons jenkins pour qu’il soit capable de faire appel au sonar
afin d’analyser notre projet YessClever.
Soumettre un plugin :
Nous cliquons sur « choisir un fichier » pour ajouter le plugin Nexus depuis notre dossier
de téléchargement.
39
Chapitre 3 Réalisation
Nous allons ajouter l’utilisateur admin du serveur nexus sous jenkins pour qu’ils
puissent communiquer.
40
Chapitre 3 Réalisation
Cette partie consiste à configurer l’orchestrateur jenkins pour communiquer avec les autres
composants de notre architecture afin d’assurer le bon fonctionnement de l’intégration continue.
Création d’un nouveau job jenkins de type pipeline pour tourner le projet YessClever :
41
Chapitre 3 Réalisation
Configuration du job
Comme nous avons mentionné dans la partie état de l’art, nous utilisons le langage
groovy pour configurer notre job YessClever.
Pour se faire, nous devons ajouter l’accès jenkins sur SVN, Yess Consulting nous crée
spécialement un compte SVN.
42
Chapitre 3 Réalisation
Après avoir configuré l’accès à SVN, nous lançons le premier build pour tester le bon
fonctionnement du stage « checkout » :
Dans la sortie de console, le pipeline jenkins nous affiche le log qui concerne le
téléchargement du projet depuis SVN :
43
Chapitre 3 Réalisation
Jenkins confirme à travers ce stage, la bonne installation de java, dans la console des
logs il nous affiche la version de java :
Stage « clean » : ceci supprime l’historique du build précédent, il met l’espace de travail
en état initial.
44
Chapitre 3 Réalisation
Le nettoyage de l’espace de travail est réalisé avec succès, après cette étape, jenkins
commence à compiler le code source de notre projet YessClever.
Stage « test » : c’est le stage le plus important car à travers ce dernier, jenkins exécute
la compilation du code source. En cas d’erreur il met build en état « FAILURE » et
notifie les développeurs.
45
Chapitre 3 Réalisation
Ci-dessus, le pipeline jenkins montre la fin de la compilation du code source avec succès.
Stage « sonar scan » : cette étape est très utile pour le développeur, en effet sonar
analyse le code source du projet et génère tout un rapport contenant des détails
concernant la qualité de code.
L’action sonar test est lancée par la commande maven : mvn sonar:sonar
A la fin de ce stage, le pipeline jenkins affiche le résultat des tests réalisés par sonarqube.
Dans notre cas, le projet YessClever a réussi le test de la couverture de code.
46
Chapitre 3 Réalisation
Stage « package » : si les stages précédents sont exécutés avec succès, jenkins lance
une commande maven pour créer la livrable du projet c’est-à-dire le .war qui va être
déployé dans le serveur applicatif (Tomcat dans notre cas)
Stage « Publich » : si les stages précédents ont été tous réussis, le pipeline jenkins envoi
la livrable générée dans le stage précédent vers le gestionnaire de dépôt Nexus.
47
Chapitre 3 Réalisation
Nous avons configuré notre pipeline pour lire les informations nécessaires depuis le fichier
pom.xml avant de publier l’artefact dans Nexus.
artifactId : YessClever
groupId : YessClever
version : 0.0.1
48
Chapitre 3 Réalisation
3.4. Conclusion :
Au cours de ce dernier chapitre, nous avons implémenté notre solution qui consiste en
la mise en place d’une plateforme d’intégration continue, et qui a été déroulé sur deux
étapes : une étape technique pour la configuration de l’environnement, et une étape
fonctionnelle pour la configuration des composants.
49
Conclusion générale
Ce travail s’inscrit dans le cadre de la réalisation du projet de fin d’études, il est réalisé au
sein de la société Yess Consulting qui consiste à la mise en place d’une chaîne d’intégration
continue basée sur docker et docker-compose. Nous avons décomposé notre travail sur deux
modules, un module concernant l’infrastructure sur le serveur et un module d’intégration
continue.
Le déploiement de la plateforme, ainsi que les tests que nous avons fait pour le produit
YessClever sont tous réalisés avec succès.
Ce stage nous a beaucoup apporté, tant sur le plan personnel que professionnel. Il nous a
permis de mieux comprendre et d’appréhender l’organisation d’une entreprise, ses contraintes
et ses missions. Ceci présente pour nous une opportunité pour mieux comprendre le concept du
DevOps.
50
Liste des Références
[1]
Récupéré sur : http://www.yess-consulting.com/
[2]
Récupéré sur : https://artkeos.com/qu-est-ce-que-integration-continue/
[3]
Récupéré sur : http://www.isi.rnu.tn/BIBI/ing/P%20ING%20513
[4]
Récupéré sur : http://www.arcitek.fr/?fond=virtualisation
[5]
Récupéré sur : http://www.it-connect.fr/les-types-dhyperviseurs/
[6]
Récupéré sur : https://jack-vanlightly.com/blog/2017/2/19/sonarqube-hell-yes-sonarlint-no-
thanks
[7]
Récupéré sur : http://blog.nicolargo.com/2014/06/virtualisation-legere-docker.html
51
Annexe
Installation docker :
Vérification de l’installation :
Par défaut, les commandes docker s’exécutent seulement avec l’utilisateur root
Un utilisateur normal n’a pas les permissions nécessaires pour exécuter les commandes docker
qu’après l’ajouter dans le groupe docker à travers la commande suivate :
Installation docker-compose :
Vérification de l’installation :
52
Résumé :
L’objectif de ce projet est de mettre en place une plateforme d’intégration continue basée sur la
technologie docker comme solution de virtualisation.
L’architecture est composée de quatre outils : SVN, Jenkins, Sonar et Nexus, chaque composant
a son propre rôle pour l’intégration continue du projet YessClever.
Jenkins est le moteur de cette plateforme, il est en communication avec tout le reste des
composants, en effet il télécharge le code source depuis SVN, puis il lance sa compilation, il
vérifie sa qualité avec Sonar, puis il génère le livrable, et enfin il l’envoie vers le gestionnaire
de dépôt Nexus.
Mots clés :
Abstract:
The goal of this project is to set up a continuous integration platform based on docker
technology as a virtualization solution.
The architecture is composed of four tools: SVN, Jenkins, Sonar and Nexus, each component
has its own role for the continuous integration of the project YessClever.
Jenkins is the engine of this platform, in communication with all the rest of the components,
indeed it downloads the source code from SVN, then it starts his compilation, it checks his
quality with Sonar, then it generates the deliverable, and finally he sends it to the Nexus Deposit
Manager.
Keywords :
Continuous integration, virtualization, docker, DevOps
53