Académique Documents
Professionnel Documents
Culture Documents
Pr Oukharijane Jamila
jamila.oukharijane@gmail.com
2022/2023
Chapitre I :
Les concepts de Devops
I. Introduction à DevOps
Jamila Oukharijane 3
I. Introduction à DevOps
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
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
Jamila Oukharijane 15
lOMoARcPSD|23833432
Git
Jamila Oukharijane 16
lOMoARcPSD|23833432
Repositories Git
• Local : .git
Jamila Oukharijane 17
lOMoARcPSD|23833432
Repositories Git
Jamila Oukharijane 18
lOMoARcPSD|23833432
Initialisation de GIT
• 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
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
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
Jamila Oukharijane 23
lOMoARcPSD|23833432
Le Commit
$ 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
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
$ git branch
* master
user-management
Jamila Oukharijane 26
lOMoARcPSD|23833432
Les branches
$ git branch
master
* user-management
Jamila Oukharijane 27
lOMoARcPSD|23833432
Les branches
Jamila Oukharijane 28
lOMoARcPSD|23833432
Les branches
$ git log
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
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
Jamila Oukharijane 32
lOMoARcPSD|23833432
Jamila Oukharijane 33
lOMoARcPSD|23833432
Jamila Oukharijane 34
lOMoARcPSD|23833432
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
Jamila Oukharijane 36
lOMoARcPSD|23833432
Jamila Oukharijane 37
lOMoARcPSD|23833432
Jamila Oukharijane 38
lOMoARcPSD|23833432
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
Jamila Oukharijane 40
lOMoARcPSD|23833432
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
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.
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
Jamila Oukharijane 48
lOMoARcPSD|23833432
Installation de JDK 11
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 :
Installation de Maven
Jamila Oukharijane 52
lOMoARcPSD|23833432
Installation de Maven
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
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
Jamila Oukharijane 64
lOMoARcPSD|23833432
Configuration de Jenkins
Jamila Oukharijane 65
lOMoARcPSD|23833432
Jamila Oukharijane 66
lOMoARcPSD|23833432
Jamila Oukharijane 67
lOMoARcPSD|23833432
Jamila Oukharijane 68
lOMoARcPSD|23833432
Jamila Oukharijane 69
lOMoARcPSD|23833432
Jamila Oukharijane 70
lOMoARcPSD|23833432
Jamila Oukharijane 71
lOMoARcPSD|23833432
Décocher ce choix
Jamila Oukharijane 72
lOMoARcPSD|23833432
Jamila Oukharijane 73
lOMoARcPSD|23833432
Décocher ce choix
Jamila Oukharijane 74
lOMoARcPSD|23833432
Jamila Oukharijane 75
lOMoARcPSD|23833432
• Le projet dans Jenkins est représenté par un job qui est composé du
plusieurs processus du build.
✓ Création du job
✓ Lancement du build
• Tous processus (ou étapes) du build dans les jobs sont manipulés
directement à travers des plugins.
Jamila Oukharijane 76
lOMoARcPSD|23833432
Les Jobs qui permettent de compiler (build) un projet est les suivantes:
1. Récupération du projet
2. Compilation
Jamila Oukharijane 77
lOMoARcPSD|23833432
Jamila Oukharijane 78
lOMoARcPSD|23833432
Jamila Oukharijane 79
lOMoARcPSD|23833432
Jamila Oukharijane 80
lOMoARcPSD|23833432
• 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
Jamila Oukharijane 82
lOMoARcPSD|23833432
Jamila Oukharijane 83
lOMoARcPSD|23833432
Pour les autres taches (2, 3, 4 et 5), on peut les configurer à travers
la partie Build.
Jamila Oukharijane 84
lOMoARcPSD|23833432
Jamila Oukharijane 85
lOMoARcPSD|23833432
Jamila Oukharijane 86
lOMoARcPSD|23833432
Jamila Oukharijane 87
lOMoARcPSD|23833432
Jamila Oukharijane 88
lOMoARcPSD|23833432
Jamila Oukharijane 89
lOMoARcPSD|23833432
https://www.jenkins.io/doc/book/pipeline
/getting-started/
Jamila Oukharijane 90
lOMoARcPSD|23833432
Jamila Oukharijane 91
lOMoARcPSD|23833432
Jamila Oukharijane 92
lOMoARcPSD|23833432
Jamila Oukharijane 93
lOMoARcPSD|23833432
Jamila Oukharijane 94
lOMoARcPSD|23833432
Jamila Oukharijane 95
lOMoARcPSD|23833432
Jamila Oukharijane 96
lOMoARcPSD|23833432
http://192.168.162.222:8080/job/pipeline-1/build?token=pipeline-1-token
Jamila Oukharijane 97
lOMoARcPSD|23833432
Jamila Oukharijane 98
lOMoARcPSD|23833432
Travail à faire
Jamila Oukharijane 99
lOMoARcPSD|23833432
Chapitre III :
Docker
lOMoARcPSD|23833432
La virtualisation
La virtualisation
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.
La virtualisation lourde
La virtualisation lourde
• Avantages des VMs
Une bonne exploitation des ressources
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)
La virtualisation vs la containérisation
La virtualisation vs la containérisation
La virtualisation vs la containérisation
Virtualisation Containerisation
Une virtualisation lourde Une virtualisation légère
À base d’hyperviseur À base des conteneurs
Docker - Définition
Docker - Définition
Construction d’images
Gestion d’images :
Localement sur une machine
Globalement (Registre -- Docker hub)
Exécution et gestion de conteneurs
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.
Docker - Inconvénients
Docker - Composants
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
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 - Composants
Docker - Composants
Docker - Composants
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 :
Docker – Installation
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 :
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)) :
$ docker
o ADD permet de copier un fichier depuis la machine hôte ou depuis une URL
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
Introduction
Introduction
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>
Introduction
→ 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.
Introduction
→ Et là, il nous faut docker compose.
Docker Compose
Docker Compose
Le nom de base de
l’image (node.js 12.x)
Exposer le port du
conteneur à l'hôte
- Comment vérifier les logs des conteneurs qui ont été lancé?
docker-compose logs
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.
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
Docker et Jenkins
1- Créer un Dockerfile dans votre projet achat (partie Spring) pour permettre
la création de l’image.
« A Compléter …» « A Compléter …»
Docker et Jenkins
4. Ajouter le « stage » nécessaire pour lancer le fichier « Docker-
compose » automatiquement avec l’orchestrateur Jenkins.
Docker et Jenkins