Vous êtes sur la page 1sur 160

DevOps

Pr Oukharijane Jamila
jamila.oukharijane@gmail.com

2022/2023
Chapitre I :
Les concepts de Devops
I. Introduction à DevOps

Traditionnellement, au sein d’un système d’information, on trouve deux types


d’organisations clairement identifiés :

Development Team : équipe de développement consiste à livrer des
fonctionnalités dans un temps précis

Operations Team : équipe d’exploitation est chargée de s’assurer du bon état
de fonctionnement du système et de sa stabilité dans le temps.
Ces deux catégories sont généralement séparées et chacune d’entre eux à un rôle
bien défini.

Jamila Oukharijane 3
I. Introduction à DevOps

Ce type d’organisation est un générateur de stress, voire de conflit, et peut avoir de


graves conséquences portant atteinte à la rentabilité et à l’image de l’entreprise.
II. Qu’est-ce que le DevOps ?

DevOps est une combinaison de deux mots, l'un est le Développement de


logiciels et le second est les Opérations :

DevOps aide à réduire la déconnexion entre les développeurs de logiciels, les


ingénieurs d'assurance qualité (QA) et les administrateurs système.

Jamila Oukharijane 5
II. Qu’est-ce que le DevOps ?


DevOps est un ensemble de pratiques qui met l’accent sur la collaboration et
la communication entre les développeurs de logiciels et les professionnels
des opérations informatiques, en automatisant le processus de livraison de
logiciels et les changements d’infrastructure.

DevOps vise à créer une culture et un environnement dans lesquels la
conception, les tests et la diffusion de logiciels peuvent être réalisés
rapidement, fréquemment et efficacement.

DevOps n’est pas seulement une méthodologie, c’est une véritable philosophie
de travail.

Jamila Oukharijane 6
III. Les bénéfices d’une approche DevOps

La mise en application de l’approche DevOps au sein des équipes et des


environnements garantit de nombreux avantages :

La collaboration : Cela motive les personnes de différents départements à
s’assembler et à réfléchir à la meilleure façon d’améliorer le flux de travail
opérationnel d’un produit.

La vitesse : L’un des avantages inhérents du DevOps est qu'il accélère la
fréquence et la vitesse à laquelle les entreprises peuvent introduire des
nouveaux produits sur le marché. Cette réduction de temps est liée à ce qu’on
appelle le TTM (Time-to-market), DevOps accélère ce délais TTM grâce
aux tests continus et à l’automatisation.

L’agilité : les pratiques DevOps permettent à une organisation d’être plus
flexible qui améliore la façon dont la gestion des changements est effectuée et
garantit qu’elle ne ralentit pas et n’interrompt pas le processus en cour.

Jamila Oukharijane 7
III. Les bénéfices d’une approche DevOps


La satisfaction du client : L’un des principaux avantages du DevOps est
l’amélioration continue de l’expérience client et sa satisfaction car, au bout du
compte, l’objectif principal du DevOps est de fournir aux utilisateurs finaux
des logiciels plus utiles et de meilleure qualité.

L’innovation : le DevOps nourrit l’innovation en permettant aux équipes d’en
savoir plus et de mieux comprendre les attentes des clients.

La sécurité : Le DevSecOps suit la philosophie des améliorations itératives
constantes, ce qui facilite grandement le processus de gestion de la sécurité. Il
accélère également la vitesse de récupération si et quand des incidents de
sécurité se produisent.

Jamila Oukharijane 8
IV. L’architecture DevOps


Lorsque le développement et l’exploitation sont combinés pour collaborer,
l’architecture DevOps entre en jeu :

Jamila Oukharijane 9
IV. L’architecture DevOps


Planifier (Plan) : DevOps utilise la méthodologie agile
pour planifier le développement. Avec l’équipe des
opérations et de développement synchronisée, cela aide à
organiser le travail à planifier en conséquence pour
augmenter la productivité.

Le code (Code) : De nombreuses bonnes pratiques telles
que Git permettent d'utiliser le code, ce qui garantit
l'écriture du code pour l'entreprise, permet de suivre les
changements, d'être informé de la raison de la différence
entre le résultat réel et le résultat attendu et, si nécessaire,
de revenir au code d'origine développé. Le code peut être
organisé de manière appropriée dans des fichiers, des
dossiers, etc. Et ils peuvent être réutilisés.

Jamila Oukharijane 10
IV. L’architecture DevOps

La construction (build) : est le processus de conversion des
fichiers de code source en une application logicielle
autonome. L'automatisation du processus de construction
peut aider à garantir que le logiciel est construit de manière
cohérente et efficace et aussi il facilite l’intégration des
modifications et des mises à jour dans l'application.

Le test (Test) : L'application sera prête pour la production
après les tests. Dans le cas d'un test manuel, cela prend plus
de temps pour tester et déplacer le code vers la sortie. Les
tests peuvent être automatisés, ce qui réduit le temps de test
afin que le temps de déploiement du code en production
puisse être réduit car l'automatisation de l'exécution des
scripts supprimera de nombreuses étapes manuelles.

La libération (Relase) : Un Relase est le processus de
livraison d'une nouvelle version de l’application. Cela
implique le déploiement dans un environnement.
Jamila Oukharijane 11
IV. L’architecture DevOps

Le déploiement : fait référence au processus de livraison et
d'installation d'une nouvelle version d'une application dans
un environnement cible. Cela implique généralement de
créer le logiciel ou le système, de le tester pour s'assurer
qu'il fonctionne comme prévu, puis de le déplacer vers un
environnement de production ou réel où il peut être utilisé
par les utilisateurs finaux.

L’exploitation (Operate) : L'étape d'exploitation implique
la maintenance et l'exécution du logiciel ou du système dans
un environnement de production.

La surveillance (Monitor) : surveiller les performances et
le comportement de l’application dans l’environnement de
production. L'objectif de la surveillance dans DevOps est
d'identifier et de résoudre tout problème pouvant survenir
dans le logiciel et de s'assurer qu'il fonctionne correctement
et répond aux besoins des utilisateurs finaux.
Jamila Oukharijane 12
V. Les outils DevOps
Les équipes DevOps peuvent utiliser une variété d’outils pour des tâches
spécifiques :

Jamila Oukharijane 13
Chapitre II :
Git et GitHub
lOMoARcPSD|23833432

Outils de Contrôle de Version (CVS, SVN, GIT)

• Outils de contrôle de version : versionner, historiser,


faire travail l’équipe ensemble, traçabilité, ….

• Exemples : CVS, SVN, GIT

• Git présente un avantage majeur qui a fait que c’est l’outil


le plus utilisé maintenant :

Jamila Oukharijane 15
lOMoARcPSD|23833432

Git

• Git est un système de contrôle de version distribué gratuit et open


source conçu pour tout gérer (historique, traçabilité des
modifications, versionning, travail en équipe, …), des petits
projets aux très grands projets avec rapidité et efficacité.

Jamila Oukharijane 16
lOMoARcPSD|23833432

Repositories Git

• Local : .git

Jamila Oukharijane 17
lOMoARcPSD|23833432

Repositories Git

 Distant : Github, Gitlab, Bitbucket, …


 Créer un compte sur Github : github.com

Jamila Oukharijane 18
lOMoARcPSD|23833432

Initialisation de GIT

• Installer Git à partir du Drive - Outils (télécharger et


installer Git-2.30.0.2-64-bit.exe) ou à partir du site officiel
git- scm.com

• SCM : Source Control Management

• Ouvrir Git Bash et lancer git --version pour vérifier que Git
est bien installé :
oukharijane@LAPTOP-6PDMKV5M MINGW64 ~
$ git --version
git version 2.40.0.windows.1

Jamila Oukharijane 19
lOMoARcPSD|23833432

Initialisation de GIT

• Toujours sur Git Bash, définir ton identité, avec git config,
pour éviter que Git vous demande cela à chaque action

$ git config --list

$ git config --global user.name "Jamila OUKHARIJANE"

$ git config --global user.email "jamila,oukharijane@gmail,com"

Jamila Oukharijane 20
lOMoARcPSD|23833432

Initialisation de GIT
• Utiliser le projet timesheet-devops.
• Seuls le dossier src et le fichier pom.xml sont à envoyer sur Git :

Jamila Oukharijane 21
lOMoARcPSD|23833432

Initialisation de GIT
 Aller dans un projet existant sur votre workspace (timesheet-devops)
$ cd C:/Work/workspace-sts/timesheet-devops

 Pour initialiser un dépôt Git, on utilise ensuite la commande git init


comme ci-dessous. Cela crée un sous répertoire .git qui contient un
ensemble de fichiers qui vont permettre à un dépôt Git de fonctionner.
$ git init
Initialized empty Git repository in
C:/Work/workspace-sts/timesheet- devops/.git/

On peut utiliser ici la commande git status pour déterminer l’état des
fichiers de notre répertoire
$ git status
nothing added to commit but untrackedfiles present (use "git add" to
track)

Jamila Oukharijane 22
lOMoARcPSD|23833432

Le Commit

• Sélectionner les fichiers modifiés à commiter (dossier src et


fichier pom.xml uniquement) avec la commande git add
• Puis un git status
• Puis faire un git commit. Cela revient à dire à Git de prendre
une photo de ton projet.
$ git add pom.xml src
$ git status
(ne pas inclure les fichiers : .classpath .mvn/ .project .settings/
.springBeans HELP.md mvnw mvnw.cmd : ces fichiers sont locaux et
créés automatiquement, le développer ne le changera jamais).

$ git commit -m "initialisation du projet timesheet-devops"


[master (root-commit) 290cd41] initialisation du projet timesheet-devops
14 files changed, 941 insertions(+)
…..

Jamila Oukharijane 23
lOMoARcPSD|23833432

Le Commit

Après chaque modification d’un ou de plusieurs fichiers, vous


pouvez refaire la même action pour commiter vos
modifications : git add puis git status puis git commit (avec
un autre commentaire bien sûr).
• Exemple :
• Modifier le contenu du fichier User.java e t refaites les actions ci-
dessous (il faut mettre le chemin complet vers le fichier) :

$ git status
$ git add src/main/java/tn/esprit/spring/entities/User.java
$ git commit -m "ajout commentaire"
[master 5386a19] ajout commentaire
1 file changed, 1 insertion(+)

Jamila Oukharijane 24
lOMoARcPSD|23833432

L’historique

• Lancer la commande git log pour voir les deux commit


(les deux photos de ton projet) :
$ git log
commit 5386a198346eb13131c60ea9be651a3da667c4c2 (HEAD-> master)
Author: Jamila OUKHARIJANE <jamila.oukharijane@gmail.com>
Date: Sat Apr 9 23:18:29 2023 +0100
ajout commentaire

commit 6257aabac843778b7e7599f86b72f7b3bddf4c1a
Author: Jamila OUKHARIJANE <jamila.oukharijane@gmail.com>
Date: Sat Apr 9 23:10:06 2023 +0100
Initialisation du projet timesheet-devops

Jamila Oukharijane 25
lOMoARcPSD|23833432

Les branches

• Créer une branche (git branch) et lister les branches (le *


indique sur quelle branche nous sommes actuellement) :
$ git branch user-management

$ git branch
* master
user-management

Jamila Oukharijane 26
lOMoARcPSD|23833432

Les branches

• Basculer sur la branche user-management :

$ git checkout user-management


Switched to branch 'user-management’

$ git branch
master
* user-management

Jamila Oukharijane 27
lOMoARcPSD|23833432

Les branches

• Faite une modification sur votre fichier (User.java par


exemple) et commiter une modification sur cette
branche :
$ git add User.java

$ git commit -m "2ème ajout commentaire"


[user-management 042579c] 2ème ajout commentaire
1 file changed, 2 insertions(+), 1 deletion(-)

• Quelle commande pour voir l’historique :


$ git log

Jamila Oukharijane 28
lOMoARcPSD|23833432

Les branches
$ git log

commit 690f70f416800f25b66554c641480e344230f8f9 (HEAD-> user-management)


Author: Jamila OUKHARIJANE <jamila.oukharijane@gmail.com>
Date: Sat Apr 9 23:25:29 2023 +0100
2ème ajout commentaire

commit 5386a198346eb13131c60ea9be651a3da667c4c2 (master)


Author: Jamila OUKHARIJANE <jamila.oukharijane@gmail.com>
Date: Sat Apr 9 23:18:29 2023 +0100
ajout commentaire

commit 6257aabac843778b7e7599f86b72f7b3bddf4c1a
Author: Jamila OUKHARIJANE <jamila.oukharijane@gmail.com>
Date: Sat Apr 9 23:10:06 2021 +0100
initialisation du projet timesheet-devops

Jamila Oukharijane 29
lOMoARcPSD|23833432

Les branches
• Récupérer ce travail sur la branche principale : basculer sur
la branche qui va recevoir (master dans notre cas), faire une
fusion et supprimer la branche qui vient d’être fusionnée :
$ git checkout master
Switched to branch 'master’

$ git branch
* master
user-management

$ git merge user-management


Updating 5386a19..042579c
Fast-forward
src/main/java/tn/esprit/spring/entities/User.java|3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)

Jamila Oukharijane 30
lOMoARcPSD|23833432

Les branches
$ git branch -d user-management
Deleted branch user-management (was
0b4990e).

$ git branch
*master

Jamila Oukharijane 31
lOMoARcPSD|23833432

Dépôt distant GitHub

• Jusque là, Git nous a permis de


travailler seul sur notre projet en
local (versionning, historisation, …).

• Nous avons utilisé le dépôt Git local


: dossier (.git) :

Jamila Oukharijane 32
lOMoARcPSD|23833432

Dépôt distant GitHub

• Si on souhaite travailler en équipe :

Jamila Oukharijane 33
lOMoARcPSD|23833432

Dépôt distant GitHub


1. Créer un compte sur GitHub github.com
2. Créer un dépôt : Pour ce faire, il suffit de cliquer sur l’icône “+” située
en haut à droite puis sur “new repository”. Une page s’ouvre vous
permettant de créer un nouveau dépôt.

Jamila Oukharijane 34
lOMoARcPSD|23833432

Dépôt distant GitHub


3. Associer le dépôt distant à notre dépôt local (nom du dépôt distant
origin)

oukharijane@LAPTOP-6PDMKV5M MINGW64
/c/Work/Workspace-sts/timesheet-devops (master)
$ git remote add origin https://github.com/JamilaOUKHARIJANE/Test-
devops.git
$ git remote
origin

Jamila Oukharijane 35
lOMoARcPSD|23833432

Dépôt distant GitHub


4. Déposer votre projet ou envoyer les modifications sur le dépôt GitHub
à l’aide de la commande git push :

$ git push origin master


Enumerating objects: 53, done.
Counting objects: 100% (53/53), done.
Delta compression using up to 2 threads
Compressing objects: 100% (37/37), done.
Writing objects: 100% (53/53), 9.73 KiB | 82.00 KiB/s, done.
Total 53 (delta 7), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (7/7), done.
To https://github.com/JamilaOUKHARIJANE/Test-devops.git
* [new branch] master -> master

Jamila Oukharijane 36
lOMoARcPSD|23833432

Dépôt distant GitHub

Jamila Oukharijane 37
lOMoARcPSD|23833432

Dépôt distant GitHub


• 5. Copie d’un dépôt en local
• Comme vous allez travailler en équipe, les autres membres d’un même
groupe, récupèrent le code de GitHub avec la commande git
clone URL.
Exemple: $ git clone git://github.com/JamilaOUKHARIJANE/Test-devops.git
• Ou b ien uti l i se r le s co mmand es sui vante s :
$ git remote add origin git://github.com/JamilaOUKHARIJANE/Test-
devops.git
$ git pull origin master

Jamila Oukharijane 38
lOMoARcPSD|23833432

Dépôt distant GitHub

oukharijane@LAPTOP-6PDMKV5M MINGW64
/c/Work/Workspace-sts/timesheet-devops (master)
$ git pull origin master
remote: Enumerating objects: 53, done.
remote: Counting objects: 100% (53/53), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 53 (delta 7), reused 53 (delta 7), pack-reused 0
Unpacking objects: 100% (53/53), 9.71 KiB | 3.00 KiB/s, done.
From https://github.com/JamilaOUKHARIJANE/Test-devops
* branch master -> FETCH_HEAD
* [new branch] master -> origin/master

Jamila Oukharijane 39
lOMoARcPSD|23833432

Git avec STS


• Vous pouvez utilisez Git en ligne de commande ou sur Eclipse (Fermez
puis ouvrez votre projet sur STS).

Jamila Oukharijane 40
lOMoARcPSD|23833432

Git avec IDE

• Vous pouvez utilisez aussi Git sur I D E Intellij :

Jamila Oukharijane 41
lOMoARcPSD|23833432

TP : GIT
• Vous allez travailler en équipe :
• L’un d'entre vous récupère le dossier code-source de votre projet JEE en
local et le pousse sur Github.
• Faire des modifications sur le code et les partager sur Github.
• Invitez moi (jamila.oukharijane@gmail.com) sur le répertoire (repository) du groupe sur
github.com

Jamila Oukharijane 42
lOMoARcPSD|23833432

Chapitre II :
Jenkins
lOMoARcPSD|23833432

Jenkins - Définition

• Jenkins est un serveur open source entièrement écrit en Java. Il


permet d'exécuter (manuellement ou automatiquement) une série
d'actions pour réaliser le processus d’intégration continue.

• Jenkins utilise un serveur web, comme Apache-Tomcat ou Jetty, pour


offrir une interface web pour manipuler Jenkins.

• Il s'interface avec des systèmes de gestion de versions, tel que Git, et


exécute des scripts écrit en Groovy ou Yaml par exemple.

Jamila Oukharijane 44
lOMoARcPSD|23833432

Jenkins - Définition
 Jenkins facilite l'intégration continue et la livraison continue dans les
projets en automatisant les parties liées à la construction (build), aux
tests et au déploiement.

 Cela permet aux développeurs de travailler en permanence sur


l'amélioration du produit en intégrant des modifications au projet et en
les testant plus rapidement.

Jamila Oukharijane 45
lOMoARcPSD|23833432

Jenkins - Définition

Jamila Oukharijane 46
lOMoARcPSD|23833432

Installation de JDK 11
o Se placer au niveau du dossier de votre VM CentOS, lancez votre
VM (vagrant up), et lancer un shell (vagrant ssh).

o Installer la JDK 11 :

sudo yum
update
sudo yum install java-11-openjdk-
devel

Jamila Oukharijane 47
lOMoARcPSD|23833432

Installation de JDK 11

o Pour vérifier que le JDK 11 est bien installé, exécuter la commande


suivante:

Jamila Oukharijane 48
lOMoARcPSD|23833432

Installation de JDK 11

Configuration des variables d’environnement


o Afin d'aider les applications basées sur Java à localiser
correctement la machine virtuelle Java, vous devez définir deux
variables d'environnement : "JAVA_HOME" et "JRE_HOME"

tee : écrit le contenu du stdout vers un fichier


source : exécute le contenu d’un fichier

Jamila Oukharijane 49
lOMoARcPSD|23833432

Installation de JDK 11
o Enfin, exécuter les commandes suivantes pour vérifier :

Jamila Oukharijane 50
lOMoARcPSD|23833432

Installation de JDK 11
o Assurez-vous que votre système pointe sur la version 11 et non 8 :

o Redémarrez votre VM (vagrant halt, vagrant up), si la modification n’a


pas été prise en compte.
Jamila Oukharijane 51
lOMoARcPSD|23833432

Installation de Maven

o Pour installer Maven, vous devez lancer le terminal et exécuter les


commandes suivantes:

o Pour vérifier que le Maven est bien installé :

Jamila Oukharijane 52
lOMoARcPSD|23833432

Installation de Maven

o Pour définir la variable d'environnement Maven : "M2_HOME"

Jamila Oukharijane 53
lOMoARcPSD|23833432

Installation de Git

o Pour pouvoir utiliser Git dans Jenkins, il faut installer Git sur votre
VM (aucune configuration Git dans Jenkins ne sera nécessaire) :

Jamila Oukharijane 54
lOMoARcPSD|23833432

Installation de Jenkins

o Pour installer Jenkins, vous devez exécuter les commandes suivantes:


 Commencer par installer wget pour pouvoir télécharger des fichiers :

sudo yum install wget

 puis :

Jamila Oukharijane 55
lOMoARcPSD|23833432

Installation de Jenkins
o Pour lanc er Jenkins (start), pour lanc er jenkins automatiquement
comme service au prochains démarrages (enable)
o Pour vérifier l’installation de Jenkins : status

Jamila Oukharijane 56
lOMoARcPSD|23833432

Installation de Jenkins
o Pour ac c éder à Jenkins, vous devez réc upérer l’adresse IP
de la machine virtuelle à travers la commande:

Jamila Oukharijane 57
lOMoARcPSD|23833432

Installation de Jenkins

Jamila Oukharijane 58
lOMoARcPSD|23833432

Installation de Jenkins
o Pour la première fois, il faut débloquer Jenkins en tapant le mot de
passe qui est stocké dans le fichier de log mentionné dans la fenêtre
ci-dessus (utiliser la commande cat pour afficher le mot de passe) :

Jamila Oukharijane 59
lOMoARcPSD|23833432

Installation de Jenkins
o Installer les plugins suggérés.

Jamila Oukharijane 60
lOMoARcPSD|23833432

Installation de Jenkins

Jamila Oukharijane 61
lOMoARcPSD|23833432

Installation de Jenkins
• Vous pouvez ne créer aucun nouvel utilisateur et continuer à utiliser le
user « admin » :

Jamila Oukharijane 62
lOMoARcPSD|23833432

Installation de Jenkins
• Pour personnaliser le numéro de port de Jenkins, il suffit de le modifier
à travers cette fenêtre (vous pouvez garder le port 8080).

Jamila Oukharijane 63
lOMoARcPSD|23833432

Configuration de Jenkins

• Changer le mot de passe de « admin » à « jenkins » par


exemple :

Jamila Oukharijane 64
lOMoARcPSD|23833432

Configuration de Jenkins

• Jenkins dispose d’une interface web très simple et pratique


• On peut accéder directement vers tous les configurations
possibles.
• On trouve toutes les informations à propos de tous les jobs.

Jamila Oukharijane 65
lOMoARcPSD|23833432

Configuration de Jenkins - Plugins


• Pour installer des plugins, il suffit d’accéder à la fenêtre « Gestion des
plugins »

Jamila Oukharijane 66
lOMoARcPSD|23833432

Configuration de Jenkins - Plugins

Pour créer notre chaîne d'intégration continue, on va installer les plugins


suivant dans Jenkins (Installer c es plugins sans redémarrer,
redémarrer Jenkins à la fin) :
Git plugin (normalement déjà installé, mais vérifier)
Maven Integration
Nexus Platform
Sonargraph Integration
SonarQube Scanner

Jamila Oukharijane 67
lOMoARcPSD|23833432

Configuration de Jenkins - Plugins

Jamila Oukharijane 68
lOMoARcPSD|23833432

Configuration de Jenkins - Outils


• Redémarrer Jenkins suite à l’installation des plugins :

Jamila Oukharijane 69
lOMoARcPSD|23833432

Configuration de Jenkins - Outils


• Pour configurer les outils, il faut accéder à la fenêtre « Configuration
global des outils »

Jamila Oukharijane 70
lOMoARcPSD|23833432

Configuration de Jenkins - JDK

Jamila Oukharijane 71
lOMoARcPSD|23833432

Configuration de Jenkins - JDK

Décocher ce choix

Jamila Oukharijane 72
lOMoARcPSD|23833432

Configuration de Jenkins - JDK


• Pointer sur le JDK déjà installé sur votre VM et sauvegarder :

Jamila Oukharijane 73
lOMoARcPSD|23833432

Configuration de Jenkins - Maven

Décocher ce choix

Jamila Oukharijane 74
lOMoARcPSD|23833432

Configuration de Jenkins - Maven


• Pointer sur le Maven déjà installé sur votre VM et
sauvegarder :

Jamila Oukharijane 75
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - Job


• Les jobs ou tâches représentent le cœur du processus de « build » dans
Jenkins.

• Le projet dans Jenkins est représenté par un job qui est composé du
plusieurs processus du build.

• Tout projet sous Jenkins passe par les 3 étapes suivantes:

✓ Création du job

✓ Configuration du job (configuration des étape du build)

✓ Lancement du build

• Tous processus (ou étapes) du build dans les jobs sont manipulés
directement à travers des plugins.
Jamila Oukharijane 76
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - Job

Les Jobs qui permettent de compiler (build) un projet est les suivantes:

1. Récupération du projet

2. Compilation

3. Lancement des tests automatiques (statiques et unitaires).

4. Préparation de la version à distribuer.

5. Mise en place de la version à distribuer (Nexus).

Jamila Oukharijane 77
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - Job

Deux méthodes de configuration sont possibles pour mettre en place


un processus de compilation d’un projet :

• La méthode freestyle où la configuration du projet se réalise à


travers un formulaire à remplir.

• L’implémentation d’un pipeline, qui définit la configuration d’un


projet grâce à des scripts (basé sur Groovy). Cette méthode offre
aussi les avantages de permettre de paralléliser les étapes du
projet et offre une meilleure interface pour lire les logs.

Jamila Oukharijane 78
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - FreeStyle


• Pour montrer le fonctionnement de Jenkins, nous allons utiliser
un projet spring boot.
Au début, il faut créer un « projet Jenkins» de type freestyle

Jamila Oukharijane 79
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - FreeStyle


• Après la création du projet, configurer le. La première partie de la
page de configuration indique les informations générales du projet.

Jamila Oukharijane 80
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - FreeStyle

• Récupération du code de Git : Utiliser des répertoires Git publics ou


ajouter des clés SSH ou définir des noms d'utilisateur et des mots de passe
dans la partie « Identifiants » pour que Jenkins soit capable de récupérer le
code de Git.

• Récupérer l’URL de votre projet de Git, exemple que vous pouvez utiliser pour
tester : https://github.com/JamilaOUKHARIJANE/SpringAOP.git

Jamila Oukharijane 81
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - FreeStyle

Jamila Oukharijane 82
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - FreeStyle

Il faut choisir l’action qui va lancer la chaîne de l’intégration continue


périodiquement (process qui se lance chaque minute par exemple ou qui vérifie
si une nouvelle version est poussée sur Git …

Jamila Oukharijane 83
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - FreeStyle

Pour les autres taches (2, 3, 4 et 5), on peut les configurer à travers
la partie Build.

Jamila Oukharijane 84
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - FreeStyle

Exemple Simple 01: Écrire un message simple en affichant la date


système. Sauvegarder et attendre une minute (le job sera lancé
automatiquement chaque minute) :

Jamila Oukharijane 85
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - FreeStyle

Exemple Simple 02: Vérifie l’installation de maven.

Jamila Oukharijane 86
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - FreeStyle


• Sauvegarder la configuration et lancer le build.

Jamila Oukharijane 87
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - FreeStyle

• Si le build a échoué, l’icône s’affiche avant le nom du projet


au niveau du dashboard.

Jamila Oukharijane 88
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - FreeStyle


• Si le build a réussi, l’ic one s’affic he.

Jamila Oukharijane 89
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - Pipeline

Comparé au projet « freestyle », le projet de type « Pipeline » offre un


nouveau langage pour l’écriture de la configuration des tâches grâce
notamment au langage groovy.

Le pipeline peut ainsi être sauvegardé dans un fichier (versionning) et


peut gérer les différents cas possibles.

https://www.jenkins.io/doc/book/pipeline
/getting-started/

Jamila Oukharijane 90
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - Pipeline


• Pour montrer le fonctionnement de Jenkins, nous allons utiliser
un projet spring boot (que vous allez avoir lors du cours Git).
Au début, il faut créer un « projet » de type pipeline.

Jamila Oukharijane 91
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - Pipeline

Exemple Simple : Afficher « Hello world » avec « Groovy »

Jamila Oukharijane 92
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - Pipeline

Exemple 01 : Récupération du code du git

Si le repository est privé

Jamila Oukharijane 93
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - Pipeline

Exemple 02 : Exécuter une commande Maven

Jamila Oukharijane 94
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - Pipeline

• Si on applique les bonnes pratiques, il est préférable d’utiliser un


fichier stocké dans le référentiel du code (git) qui contient le
pipeline
• Ce fichier est nommé Jenkinsfile.

Jamila Oukharijane 95
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - Pipeline


• Pour pointer sur ce fichier, il suffit juste de configurer le pipeline jenkins.

Jamila Oukharijane 96
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - Bonus

• Lancer un build à distance (à travers un URL à saisir dans le navigateur)

http://192.168.162.222:8080/job/pipeline-1/build?token=pipeline-1-token
Jamila Oukharijane 97
lOMoARcPSD|23833432

Configuration d’un projet avec Jenkins - Bonus


Dans le navigateur :
http://192.168.162.222:8080/job/pipeline-1/build?token=pipeline-1-token
Dans Jenkins :

Jamila Oukharijane 98
lOMoARcPSD|23833432

Travail à faire

• En utilisant « Groovy », créer une chaîne d’intégration continue


qui se lance lors du détection d’un push dans le git (Jenkinsfile).
• Ce pipeline contient:
 La récupération du code source.
 Affichage de la date système

• (La case « Ce qui déclenche le build » est à décocher dans tous


vos projets (freestyle ou pipeline) après vos tests pour ne pas
avoir un job qui tourne chaque minute indéfiniment).

Jamila Oukharijane 99
lOMoARcPSD|23833432

Chapitre III :
Docker
lOMoARcPSD|23833432

La virtualisation

• La virtualisation est une technologie permettant de créer et


exécuter une ou plusieurs représentations virtuelles d’un ordinateur
ou de ses différentes ressources sur une même machine physique
• La virtualisation a eu le succès grâce au cloud computing:
C’est un Data center ou une infrastructure offerte par un
fournisseur dans laquelle la puissance de calcul et le stockage
sont gérés par des serveurs distants auxquels les usagers se
connectent via une liaison Internet sécurisée.
Élasticité rapide

Jamila Oukharijane 101


lOMoARcPSD|23833432

La virtualisation

• On distingue deux types de virtualisation tels que:


✔ La virtualisation lourde
✔ La virtualisation légère

Jamila Oukharijane 102


lOMoARcPSD|23833432

La virtualisation lourde
La virtualisation Lourde ou à base d’hyperviseur: Elle
permet de simuler une ou plusieurs machines physiques, et les
exécuter sous forme de machines virtuelles (VM) sur un
serveur.
Les machines virtuelles intègrent elles-mêmes un OS sur
lequel des applications sont exécutées.

Jamila Oukharijane 103


lOMoARcPSD|23833432

La virtualisation lourde

Jamila Oukharijane 104


lOMoARcPSD|23833432

La virtualisation lourde
• Avantages des VMs
 Une bonne exploitation des ressources

 Une machine physique est divisée en plusieurs machines virtuelles

 Plus facile de passer à l’échelle

• Limites des VMs


 Chaque VM a besoin des ressources (CPU, Stockage (Disque), RAM ,Un OS
invité)

 En augmentant les VMs, on demande plus de ressources

 Gaspillage : chaque système d’exploitation invité alloue ses propres


ressources

 Portabilité d’application n’est pas garantie


Jamila Oukharijane 105
lOMoARcPSD|23833432

La virtualisation légère: La containérisation


La virtualisation légère ou à base des conteneurs:
• Repose sur la création de conteneurs isolés les uns des autres sur un
noyau commun.
• Les conteneurs indépendants partagent un noyau commun et un
même espace mémoire.
• Une image de conteneur ne contient que les bibliothèques
nécessaires au composant.


Un conteneur est une enveloppe (emballage) contenant toutes les
ressources nécessaires pour faire fonctionner une application donné
(Environnement d’exécution comme JDK, livrable de
l’application,dépendances nécessaires)

Jamila Oukharijane 106


lOMoARcPSD|23833432

La virtualisation vs la containérisation

• Une machine virtuelle va recréer un serveur complet pour chaque


application avec son propre système d’exploitation
• Le conteneur va isoler l’application tout en utilisant le système d’exploitation
de son hôte. Ce même système d’exploitation peut être utilisé par
d’autres conteneurs ayant des tâches totalement distinctes.

Jamila Oukharijane 107


lOMoARcPSD|23833432

La virtualisation vs la containérisation

Jamila Oukharijane 108


lOMoARcPSD|23833432

La virtualisation vs la containérisation

Virtualisation Containerisation
Une virtualisation lourde Une virtualisation légère
À base d’hyperviseur À base des conteneurs

Virtualisation des ressources Virtualisation au niveau du


hardware (CPU, RAM, disque, …) système d’exploitation

Machine invité (machine


Conteneur
virtuelle)
Image ISO Librairies nécessaires
Machine hôte Moteur de conteneur
Démarrage plus lent Démarrage en quelques secondes
Entièrement isolé et donc plus Isolation au niveau du processus
sécurisé et donc moins sécurisée

Jamila Oukharijane 109


lOMoARcPSD|23833432

Docker - Définition

• Docker permet d'embarquer une application, dans un


ou plusieurs conteneurs logiciels, qui pourra s'exécuter sur
n'importe quel serveur machine, qu’il soit physique ou virtuel.
• On distingue deux versions de docker:
• Docker Entreprise Edition : Docker EE payante
• Docker Community Edition: Docker CE gratuite

Jamila Oukharijane 110


lOMoARcPSD|23833432

Docker - Définition

• Docker offre les services suivants :


Construction d’images


Gestion d’images :


Localement sur une machine


Globalement (Registre -- Docker hub)


Exécution et gestion de conteneurs

Jamila Oukharijane 111


lOMoARcPSD|23833432

Docker - Avantages
• Flexible: Même les applications les plus complexes peuvent être
conteneurisées.

• Léger: Les conteneurs exploitent et partagent le noyau hôte, ce qui les rend
beaucoup plus efficaces en termes de ressources système que les machines
virtuelles.
• Portable: Moins de dépendances avec la machine hôte.

• Faiblement couplé: Les conteneurs sont hautement autonomes et


encapsulés, ce qui vous permet de remplacer ou de mettre à niveau l’un
sans en perturber les autres.

• Évolutif: Vous pouvez augmenter et distribuer automatiquement les répliques


de conteneurs dans un centre de données.

Jamila Oukharijane 112


lOMoARcPSD|23833432

Docker - Inconvénients

• Docker présente quelques inconvénients parmi lesquelles nous


pouvons citer :

 La portabilité des conteneurs entre les différents systèmes


d’exploitation (Windows, linux, etc..) est très délicate.

 La difficulté de gérer plusieurs conteneurs simultanément.

 Possible failles de sécurité (conteneurs partagent le même


système d’exploitation)

Jamila Oukharijane 113


lOMoARcPSD|23833432

Docker - Composants

Jamila Oukharijane 114


lOMoARcPSD|23833432

Docker - Composants

Docker engine

Un environnement d'exécution et
un ensemble de services pour
manipuler des conteneurs docker
sur une machine

Une application c l i e n t - s e r v e u r

 Le serveur -- Un daemon qui


gère les conteneurs sur une
machine

 Le client -- Une interface en ligne


de commande

Jamila Oukharijane 115


lOMoARcPSD|23833432

Docker - Composants
Client Docker: Les utilisateurs de
Docker peuvent interagir avec Docker
via un client (CLI, Docker
Desktop, …). Lorsqu'une commande
docker s'exécute, le client les envoie au
démon docker, qui les exécute.

Docker Host: Une machine physique


ou virtuelle qui exécute un Docker
Daemon (Le service installé sur le
système d’exploitation hôte du serveur.)
et contient des images en cache
ainsi que des conteneurs.

Jamila Oukharijane 116


lOMoARcPSD|23833432

Docker - Composants

Images docker : ensemble de


logiciels à exécuter en tant que
conteneur contenant un ensemble
d’instructions pour la création d'un
conteneur pouvant être exécuté sur la
plateforme Docker. Les images ne sont
pas modifiables ; pour apporter des
modifications à une image, il faut en
créer une nouvelle.

Jamila Oukharijane 117


lOMoARcPSD|23833432

Docker - Composants

Conteneurs: Une fois que vous avez


exécuté une image Docker, elle crée
un conteneur Docker. Toutes les
applications et leur environnement
s'exécutent à l'intérieur de ce
conteneur. Vous pouvez utiliser une
interface (Docker Desktop, …) ou la
CLI Docker pour démarrer, arrêter,
supprimer un conteneur Docker.
Un conteneur est une instance d’une image exécutée

Jamila Oukharijane 118


lOMoARcPSD|23833432

Docker - Composants

Registres Docker: est


l'emplacement où les images Docker
sont stockées. Il s’agit :

─d'un registre docker public


(Docker Hub) ou,

─d'un registre docker privé.

Jamila Oukharijane 119


lOMoARcPSD|23833432

Docker – Installation
• Si la VM n’est pas déjà démarrée, alors sur votre machine
Windows, se placer au niveau dossier de la VM et lancer là, puis
lancer un client ssh :

Jamila Oukharijane 120


lOMoARcPSD|23833432

Docker – Installation

• Pour installer Docker, lancer, une à une, les 4 commandes


suivantes :

Jamila Oukharijane 121


lOMoARcPSD|23833432

Docker – Installation
• Pour lancer Docker (start puis status):
• enable permet de lancer automatiquement Docker comme
service lors de chaque de démarrage de votre VM :

Jamila Oukharijane 122


lOMoARcPSD|23833432

Docker – Installation
• Donner les droits d’accès en lecture et écriture, mais pas d’exécution
pour le user « vagrant », son groupe et tout autre utilisateur (6 =
(R=1 / W=1 / X=0)) :

• Pour s’assurer que tout est bon, vérifier la version de Docker


en utilisant la commande : docker -v
• puis lancer l’image « hello-world » :

Jamila Oukharijane 123


lOMoARcPSD|23833432

Docker – Premiers pas


L'outil à la ligne de commande pour exécuter des commandes Docker:

$ docker

docker run hello-world

docker: Nous voulons exécuter une commande docker


run : Commande pour créer et exécuter un conteneur docker
Hello-world : Nom de l'image à partir de laquelle est construit le conteneur

Jamila Oukharijane 124


lOMoARcPSD|23833432

Docker – Premiers pas

$ docker run hello-world

Que va-t-il se passer?

 L'image à charger est hello-world:latest


 vérification: est ce que l'image est présente localement?
 Sinon, télécharger l'image depuis Docker Hub
 Charger l'image et exécuter la commande définie pour créer un
conteneur

Jamila Oukharijane 125


lOMoARcPSD|23833432

Docker – Docker File


• Un Docker file est un document texte qui contient les
commandes qu’on pourrait exécuter en ligne de commande
pour créer sa propre image.
• Il est basé sur une image standard auquel on ajoute les
éléments propres à l’application que l’on veut déployer.

Jamila Oukharijane 126


lOMoARcPSD|23833432

Docker – Docker File


• Les instructions de base que peut contenir un DockerFile sont les
suivantes :
o FROM permet de définir l'image à partir de laquelle la nouvelle image est créée

o LABEL permet de définir l’auteur de l’image

o RUN permet de lancer une commande

o ADD permet de copier un fichier depuis la machine hôte ou depuis une URL

o EXPOSE permet d’exposer un port du container vers l’extérieur

o CMD détermine la commande qui sera exécutée lorsque le container démarrera

o ENTRYPOINT permet d’ajouter une commande qui sera exécutée par défaut

o WORKDIR permet de définir le dossier de travail pour toutes les autres commandes

o ENV permet de définir des variables d’environnements


Jamila Oukharijane 127
lOMoARcPSD|23833432

Docker – Docker File


• Pour construire l’image docker défini dans le fichier Dockerfile :
docker build -t « Nom de l’image à créer » « Path vers le fichier »

• Vous pouvez spécifier . (point) si le fichier docker est dans le


répertoire courant.
• Si vous n'utilisez pas le nom de Dockerfile par défaut, l’option -f
est requise
• Dans le nom de l’image à créer, il faut préciser votre login à
dockerhub pour pouvoir envoyer ton image sur DockerHub
(JamilaOukharijane/alpine).
• Voir commande page suivante : à partir de l’image officielle
de alpine (sur DockerHub), on va créer notre propre image
alpine:1.0.0 « customisée » avec java 11,).

Jamila Oukharijane 128


lOMoARcPSD|23833432

Docker – Docker File

Jamila Oukharijane 129


lOMoARcPSD|23833432

Docker – Commandes de base


• Extraire une image ou un référentiel d'un registre:
docker pull « nom de l’image » : « version »
Si on ne spécifie pas la version, docker télécharge la dernière
version

Jamila Oukharijane 130


lOMoARcPSD|23833432

Docker – Commandes de base


• Créer un conteneur:
docker run « nom de l’image »
Si docker ne trouve pas l’image, il la télécharge de Dockerhub et après
il crée le conteneur

Jamila Oukharijane 131


lOMoARcPSD|23833432

Docker – Commandes de base

Jamila Oukharijane 132


lOMoARcPSD|23833432

Docker – Commandes de base


• Récupérer la liste des images:
docker images

Jamila Oukharijane 133


lOMoARcPSD|23833432

Docker – Commandes de base


• Pour savoir plus de détails sur une image Docker, exécutez la
commande :
docker image inspect « id de l’image »

Jamila Oukharijane 134


lOMoARcPSD|23833432

Docker – Commandes de base


• Récupérer la liste des conteneurs: docker container ls ou bien
docker ps -a
• Récupérer la liste des conteneurs actifs : docker ps

Jamila Oukharijane 135


lOMoARcPSD|23833432

Docker – Commandes de base


• Lancer un conteneur et le laisser tourner en background (avec
l’option -d) :
• docker run -itd pour pouvoir y accéder plus tard
• La commande ci-dessous, lance un conteneur et lance dedans
un client ssh (invite de commande) :

Jamila Oukharijane 136


lOMoARcPSD|23833432

Docker – Commandes de base


• Pour accéder au conteneur déjà lancé, utiliser la commande
suivante :
• docker exec -it « id de conteneur » « command ».
• Vous pouvez manipuler le conteneur, comme si vous êtes dans
une VM ou un Serveur Linux :

Jamila Oukharijane 137


lOMoARcPSD|23833432

Docker – Commandes de base


• Supprimer une image: docker image rm «nom image » --force

• Supprimer un conteneur : docker rm « Id du conteneur »

Jamila Oukharijane 138


lOMoARcPSD|23833432

Docker – Commandes de base


• Créer un compte sur DockerHub https://hub.docker.com (Si ce
n’est déjà fait), et s’y connecter (docker login) :

Jamila Oukharijane 139


lOMoARcPSD|23833432

Docker – Commandes de base


• Envoyer une image que vous avez créé sur dockerhub
(docker push) :

Jamila Oukharijane 140


lOMoARcPSD|23833432

Docker – Commandes de base

Jamila Oukharijane 141


lOMoARcPSD|23833432
lOMoARcPSD|23833432

Introduction

• Notre application Spring Boot codée, compilée et testée (unitairement et


qualitativement) doit être intégrée dans une chaine DevOps complète
(CI/CD).
• La chaine d’intégration (CI) continue a été réalisée grâce à Jenkins via la
création d’un pipeline.
• Dans ce cours on v a s’intéresser à la chaine CD (Continuos delivery and
deployment )

Jamila Oukharijane 143


lOMoARcPSD|23833432

Introduction

• L’objectif de la partie CD (déploiement et livraison continu) est


de placer notre application dans une machine de production et
d’assurer son fonctionnement (Communication avec la base
de données, web services fonctionnels, etc..)
• La machine de production peut être:
✓ Une machine physique
✓ Une machine virtuelle
✓ Un conteneur Docker

Jamila Oukharijane 144


lOMoARcPSD|23833432

Introduction
Nous avons vu que nous pouvons isoler chaque application à
l'intérieur d’une image où nous pouvons définir son environnement
dans un Dockerfile.
Puis, avec un simple “docker build” et “docker run”, notre
application sera accessible via le port que nous avons exposé:
- docker build –t <image_name> .
- docker run –p 8080:8080 <image_name>

Jamila Oukharijane 145


lOMoARcPSD|23833432

Introduction

Chaque application a besoin de connecter à un serveur base de données.

→ Pour que ces deux-là puissent communiquer, il faut les mettre sous
le même réseau et lancer la base de données avant le démarrage
de l'application.

docker run –p 9090:9090 –-network mynetwork –d app-image-name

docker run --name mysqldb –-network mynetwork -e MYSQL_ROOT_PASSWORD=my-secret-pw –v


/home/mysql/data:/var/lib/mysql -d mysql:8

Jamila Oukharijane 146


lOMoARcPSD|23833432

Introduction
→ Et là, il nous faut docker compose.

Jamila Oukharijane 147


lOMoARcPSD|23833432

Docker Compose

• Docker Compose est un outil permettant de définir et d'exécuter des


applications Docker multi-conteneurs.
• Dans cette logique, chaque partie de l'application (code, base de
données, serveur web, ...) sera hébergée par un conteneur.
• Cet outil repose sur le langage YAML pour décrire l'architecture physique
de l’application.
• Le fichier Compose comporte la version (OBSOLÈTE), les
services (REQUIS), les réseaux, et les configurations

• Après la configuration du fichier YAML, une seule commande à exécuter


pour créer et démarrer tous les services.

Jamila Oukharijane 148


lOMoARcPSD|23833432

Docker Compose

• L'utilisation de Docker Compose se résume à un processus en trois


étapes :
1. Définir l'environnement de votre application à l'aide d’un
« Dockerfile » afin qu'il puisse être reproduit partout.
2. Définir les services qui composent votre application dans
« docker-compose.yml » afin qu'ils puissent être exécutés
ensemble dans un environnement isolé.
3. Exécuter la commande « docker compose up », c’est la
commande pour lancer votre application entière.

Jamila Oukharijane 149


lOMoARcPSD|23833432

Docker Compose - Exemple

La version du format de fichier


Compose (1,2 ou 3)

Définir les images à exécuter simultanément

Le nom de base de
l’image (node.js 12.x)

Répertoire de travail La définition


des commandes d’un conteneur

Exposer le port du
conteneur à l'hôte

Jamila Oukharijane 150


lOMoARcPSD|23833432

Installation Docker Compose

sudo curl –L "https://github.com/docker/compose/releases/download/1.23.2/docker-


compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose


docker-cmpose --version

Jamila Oukharijane 151


lOMoARcPSD|23833432

Les 3 fonctions principales

Les 3 fonctions principales de docker-compose sont :

- Comment lancer un docker-compose? (se mettre dans le dossier


contenant le fichier docker-compose.yml) :
docker-compose up –d

- Comment vérifier les logs des conteneurs qui ont été lancé?
docker-compose logs

- Comment arrêter un docker compose ?


docker-compose down

Jamila Oukharijane 152


lOMoARcPSD|23833432

TP en Classe
Essayez de lancer Nexus et Sonar via un docker-compose.yml.
Solution :
• Pour utiliser « Docker-compose », nous allons configurer les deux images
‘Sonarqube’ et ‘Nexus’ afin de les lancer simultanément.

• Créer un dossier nommé « sonar-nexus » et ensuite aller dans ce répertoire


• Créez maintenant le fichier YAML en utilisant votre éditeur de texte préféré:

Jamila Oukharijane 153


lOMoARcPSD|23833432

Docker Compose - Exécuter des conteneurs ensemble


• Contenu du fichier « docker-compose.yml »:

Jamila Oukharijane 154


Docker Compose - Exécuter des conteneurs ensemble
• Exécuter la commande suivante pour créer le conteneur

SonarQube Nexus
Jamila Oukharijane 155
Docker Compose - Exécuter des conteneurs ensemble

• Comment vérifier les logs des conteneurs qui ont été lancés ?
docker-compose logs

Jamila Oukharijane 156


Docker Compose - Exécuter des conteneurs ensemble

• Comment arrêter un docker compose ?


docker-compose down

Jamila Oukharijane 157


lOMoARcPSD|23833432

Docker et Jenkins
1- Créer un Dockerfile dans votre projet achat (partie Spring) pour permettre
la création de l’image.

2- Ajouter les « stages » nécessaires pour créer et déposer l’image à


déployer (Partie Spring) dans « DockerHub »

« A Compléter …» « A Compléter …»

3- Créer un docker-compose.yml pour faire tourner votre application achat


(Backend et Frontend) avec une base de données MySQL (inspirez vous de
l’exemple ci-dessus). 3 Services sont à créer dans docker-compose.yml.
Jamila Oukharijane 158
lOMoARcPSD|23833432

Docker et Jenkins
4. Ajouter le « stage » nécessaire pour lancer le fichier « Docker-
compose » automatiquement avec l’orchestrateur Jenkins.

Jamila Oukharijane 159


lOMoARcPSD|23833432

Docker et Jenkins

• Indication : Pour automatiser la création des images « Docker »


dans « Jenkins », vous pouvez Installer le plugin « Docker Pipeline »:

Jamila Oukharijane 160

Vous aimerez peut-être aussi