Chapitre 1 – Introduction au DevOps
2. 📈 Évolution des méthodologies
Classique (RUP, 2TUP) Agile (Scrum, XP)
Processus lourds Adaptabilité, interactions
Communication + feedback
Documentation exhaustive
rapide
Moins d’adaptation au
Cycles courts (sprints)
changement
3. 🏛️ Évolution des architectures
Monolithique Micro-services
Une seule application Petits services indépendants
Même technologie pour Technologies variées selon les
tout services
Difficulté d’évolutivité Ajout/mise à l’échelle plus simple
4. 🔁 Cycle de vie d’un projet
1. Développement
2. Recette / Intégration
3. Mise en production
4. Vie en production (corrections, maintenance)
5. 🧪 Environnements techniques
• DEV : Développement
• INT : Intégration
• UAT : User Acceptance Testing
• QUALIF
• PREPROD
• PROD : Production
6. 🧩 Pourquoi DevOps ?
• Mieux connecter les équipes Dev et Ops
• Automatiser les étapes du cycle de vie
• Réduire les délais et minimiser les risques
• Augmenter la confiance entre les équipes
7. 🚀 Définitions essentielles
• DevOps = Développement + Operations
→ Culture + Pratiques pour automatiser, améliorer la communication, réduire le
Time to Market.
8. 🔄 Processus DevOps
Terme Description
CI - Intégration
Automatiser compilation/test à chaque modification
Continue
CD - Livraison Déploiement auto sur environnements intermédiaires
Continue sauf prod
CD - Déploiement
Déploiement automatique jusqu’en production
Continu
9. ⚒️ Outils du module DevOps
Outil Rôle
Outil de build basé sur la
Maven
convention
JUnit Tests unitaires Java
Git Gestion de versions
SonarQube Analyse qualité du code
Nexus Gestionnaire de livrables
Jenkins Serveur CI pour build & tests
Docker Conteneurisation d’applications
Docker
Orchestration multi-conteneurs
Compose
Prometheus Monitoring et alertes
Grafana Visualisation des métriques
🃏 Flashcards pour révision
Q: Qu’est-ce que DevOps ?
A: Une culture + ensemble de pratiques qui unifie Dev et Ops pour automatiser,
améliorer la qualité et livrer plus rapidement.
Q: Quelle est la différence entre CI, CD (Delivery) et CD (Deployment) ?
A:
• CI : Intégration continue (compilation + test)
• CD Delivery : Livraison continue (jusqu’à PREPROD, déclenchement manuel
pour PROD)
• CD Deployment : Déploiement automatique jusqu’à PROD
Q: Quel est l’intérêt de l’architecture micro-services ?
A: Modifiabilité, scalabilité, indépendance technologique de chaque service.
Q: Citez les principaux environnements dans DevOps.
A: DEV, INT, UAT, QUALIF, PREPROD, PROD
Q: Quel est le rôle de Jenkins ?
A: Automatiser la compilation, les tests, le déploiement à chaque changement du code
source.
Q: Quel est l’outil utilisé pour mesurer la qualité du code ?
A: SonarQube
Q: À quoi sert Prometheus ?
A: Monitoring en temps réel avec génération d’alertes.
Q: Quelle est la différence entre livraison continue et déploiement continu ?
A: Livraison continue s’arrête avant la PROD, déploiement continu inclut la PROD.
Q: Quels outils sont utilisés pour le monitoring ?
A: Prometheus (collecte) et Grafana (visualisation)
Q: Quelle est la méthodologie la plus adaptée pour DevOps ?
A: Agile (Scrum, XP), car elle favorise la collaboration et la flexibilité.
Chapitre 2 - CI & Jenkins
1. 📌 Qu’est-ce que l’intégration continue (CI)
• Les développeurs soumettent fréquemment leur code à un référentiel partagé.
• Un système détecte les changements et déclenche automatiquement une
construction.
• Les développeurs sont notifiés immédiatement en cas d’échec du build.
Objectifs :
• Détecter rapidement les bugs.
• Éviter les régressions.
• Assurer une qualité de code constante.
2. ⚙️ Jenkins - Définition et Rôle
• Serveur open-source écrit en Java.
• Permet l’automatisation des builds, tests, déploiements.
• Interface web conviviale (via Tomcat ou Jetty).
• Intégration avec Git, SVN, CVS, et exécution de scripts (Groovy, YAML).
• Supporte plus de 1500 plugins.
3. 🏗️ Installation & Configuration de Jenkins
• Installation via .war, packages Linux, ou conteneur Docker.
• Nécessite JDK, Maven, Git.
• Configuration :
o Installation des plugins (Git, Maven, Pipeline…).
o Paramétrage des outils et chemins.
4. 🔧 Types de Jobs Jenkins
• Freestyle (formulaire simple)
• Projet Maven
• Pipeline (script Groovy, souvent dans Jenkinsfile)
• Multibranche Pipeline
5. 🔄 Étapes d’un Job Jenkins
1. Création du job
2. Configuration :
a. Récupération du code source
b. Compilation (Maven, Gradle, etc.)
c. Tests unitaires (JUnit)
d. Analyse de qualité (Sonar)
e. Distribution (via Nexus)
3. Lancement du build
6. 🛠️ Freestyle vs Pipeline
Freestyle Pipeline
Interface graphique simple
Scripté (Groovy), plus flexible
(formulaire)
Idéal pour automatiser des processus
Limité pour des projets complexes
avancés
Pas de gestion de version Jenkinsfile versionné avec le code
Supporte le parallélisme et scénarios
Peu de parallélisme
avancés
7. 🧩 Structure d’un Jenkinsfile (Pipeline)
• Déclaratif ou impératif
• Contenu typique :
o Définir les étapes (stages)
o Utiliser agent, steps, post, etc.
• Fichier stocké dans le dépôt Git
🃏 Flashcards pour révision
Q: Qu’est-ce que Jenkins ?
A: Un outil open-source pour l’intégration continue, écrit en Java.
Q: Quel est le rôle principal de Jenkins ?
A: Automatiser les tâches de compilation, test, et déploiement du code.
Q: Quels sont les types de jobs dans Jenkins ?
A: Freestyle, Projet Maven, Pipeline, Multibranche Pipeline.
Q: Quelle est la différence entre un job Freestyle et un Pipeline ?
A: Freestyle est configuré par formulaire, Pipeline est scripté (plus puissant).
Q: Qu’est-ce qu’un Jenkinsfile ?
A: Fichier contenant le script Pipeline, versionné dans le dépôt Git.
Q: Quels outils doivent être installés pour utiliser Jenkins avec Maven ?
A: JDK, Maven, Git, Jenkins, plus les plugins nécessaires.
Q: Citez 3 types de plugins Jenkins.
A: Git Plugin, SonarQube Scanner, Docker Pipeline.
Q: Quels sont les déclencheurs possibles pour un build Jenkins ?
A: Manuel, périodique, webhook, build distant.
Q: Quelles sont les étapes d’un build typique ?
A: Récupération code → Compilation → Tests → Analyse qualité → Distribution.
Q: Comment suivre les bonnes pratiques avec Pipeline ?
A: Utiliser un Jenkinsfile dans le dépôt, versionner le pipeline avec le code.
Chaptitre 3:Docker
Docker & Docker Compose
1. Docker – Définition
Docker est une plateforme de conteneurisation qui permet d'emballer (packager) une
application avec ses dépendances dans un environnement isolé : le conteneur.
2. Concepts Clés
Concept Définition
Modèle en lecture seule pour créer un conteneur (ex : une app + son
Image
environnement).
Conteneur Instance exécutable d'une image Docker.
Dockerfile Script contenant les instructions pour construire une image Docker.
Registry Serveur pour stocker/partager les images (ex : Docker Hub).
3. Docker – Architecture
• Client Docker (docker) : interface CLI pour envoyer des commandes.
• Démon Docker (dockerd) : exécute les conteneurs, gère les images, volumes,
etc.
• Registre Docker : pour stocker et partager les images (privé ou public).
📘 Commandes essentielles Docker
🔹 Création & gestion d'images
Action Commande
Construire une image depuis un Dockerfile docker build -t nom_image .
Lister les images docker images
Supprimer une image docker rmi nom_image
🔹 Gestion de conteneurs
Action Commande
Exécuter un conteneur docker run nom_image
Exécuter avec ports et docker run -d -p 8080:80 --name mon_conteneur
nom nom_image
Lister les conteneurs en
docker ps
cours
Lister tous les
docker ps -a
conteneurs
Arrêter un conteneur docker stop id_ou_nom
Démarrer un conteneur docker start id_ou_nom
Supprimer un conteneur docker rm id_ou_nom
🔹 Autres commandes utiles
Action Commande
Télécharger une image docker pull nom_image
Pousser une image vers un registre docker push mon_registry/mon_image
Créer une image à partir d’un conteneur
docker commit id nom_image
modifié
Exporter un conteneur en tar docker export -o fichier.tar id
📦 Docker Compose – Gestion de plusieurs conteneurs
1. Définition
Docker Compose permet de définir et de gérer plusieurs conteneurs avec un seul
fichier (docker-compose.yml). Idéal pour les applications multi-services (ex:
backend + BDD).
2. Structure d’un fichier docker-compose.yml (exemple simple)
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: root
3. Commandes Docker Compose
Action Commande
Lancer les services docker-compose up
Lancer en arrière-plan (détaché) docker-compose up -d
Arrêter les services docker-compose down
Recréer les services docker-compose up --force-recreate
Voir les logs docker-compose logs
Construire les images (si build:
docker-compose build
utilisé)
🧠 Flashcards – Révision Docker & Docker Compose (Q/R)
🟧 Carte 1
Q : Qu’est-ce qu’une image Docker ?
R : Un modèle figé contenant tout le nécessaire pour exécuter une application.
🟧 Carte 2
Q : Quelle commande permet de créer un conteneur ?
R : docker run nom_image
🟧 Carte 3
Q : Quelle est la commande pour arrêter un conteneur en cours d’exécution ?
R : docker stop nom_conteneur
🟧 Carte 4
Q : Quelle commande permet de supprimer une image ?
R : docker rmi nom_image
🟧 Carte 5
Q : Que fait docker-compose up ?
R : Il lance tous les services définis dans le fichier docker-compose.yml.
🟧 Carte 6
Q : Quel est l’intérêt de Docker Compose ?
R : Gérer facilement plusieurs conteneurs (ex: app + base de données) avec un seul
fichier.
🟧 Carte 7
Q : Quelle commande permet de construire une image Docker ?
R : docker build -t nom_image .
🟧 Carte 8
Q : Quelle commande permet d’envoyer une image Docker vers un registre ?
R : docker push nom_registry/nom_image
DevOps Chapitre 5 : SonarQube
1. Introduction
• Objectif : Assurer une qualité de code élevée dès le début du développement et
à long terme.
• Tests = 30% du temps de développement ≈ qualité, sécurité, fiabilité.
2. Tests dynamiques vs tests statiques
• Tests dynamiques :
o Exécution du code (tests unitaires, intégration, charge…).
• Tests statiques :
o Sans exécuter le code.
o Analyse du code source (syntaxe, règles de codage...).
o Outil principal : SonarQube.
3. Qu’est-ce que SonarQube ?
• Outil open-source d’analyse statique de code.
• Détecte : bugs, vulnérabilités, mauvaises pratiques (code smells).
• Fournit une revue de code automatisée et des métriques de qualité.
4. Caractéristiques de SonarQube
• Multilingue : Java, Python, JavaScript, C#, PHP...
• Rapports détaillés.
• Intégration avec Git, Jenkins, IDEs.
• Personnalisation des règles.
• Support CI/CD.
5. SonarQube dans IntelliJ
• Installer le plugin SonarLint via les paramètres.
• Analyse directe du code dans l’IDE.
• Visualisation immédiate des problèmes.
6. Installation de SonarQube (Docker)
1. Télécharger l’image :
docker pull sonarqube
2. Lancer le conteneur :
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092
sonarqube
3. Accéder à l’interface :
http://<ip-vm>:9000
Identifiants par défaut : admin/admin
7. SonarQube + Jenkins
• Étapes :
o Ajouter un stage dans le pipeline Jenkins.
o Exécuter mvn clean compile (nettoyage et compilation).
o Exécuter mvn sonar:sonar pour lancer l’analyse.
o Jenkins envoie le rapport au serveur SonarQube.
8. Analyse des résultats SonarQube
• Bugs : erreurs pouvant provoquer des exceptions (ex :
NullPointerException).
• Vulnerabilities : failles de sécurité potentielles.
• Code Smells : mauvaises pratiques de codage (commentaires inutiles...).
• Hotspots : zones critiques à examiner.
• Coverage : couverture de tests (outil utilisé : JaCoCo).
• Le taux de duplication et de couverture sont mesurés.
🧠 Flashcards – Fiches de Révision (Questions /
Réponses)
🟨 Carte 1
Q : À quoi sert SonarQube ?
R : À analyser statiquement le code pour détecter bugs, vulnérabilités et mauvaises
pratiques.
🟨 Carte 2
Q : Quelle est la différence entre test statique et test dynamique ?
R : Statique : sans exécuter le code. Dynamique : nécessite l’exécution du code.
🟨 Carte 3
Q : Quelle commande Docker permet de lancer SonarQube ?
R : docker run -d --name sonarqube -p 9000:9000 sonarqube
🟨 Carte 4
Q : Quel est l'identifiant de connexion par défaut à SonarQube ?
R : Nom d'utilisateur : admin – Mot de passe : admin
🟨 Carte 5
Q : Quel plugin IntelliJ permet d’analyser le code avec SonarQube ?
R : SonarLint
🟨 Carte 6
Q : Quelle commande Maven est utilisée pour lancer l’analyse SonarQube ?
R : mvn sonar:sonar
🟨 Carte 7
Q : Qu’est-ce qu’un "Code Smell" ?
R : Une mauvaise pratique de codage qui rend le code difficile à maintenir, sans être un
bug.
🟨 Carte 8
Q : Quel outil est utilisé avec SonarQube pour mesurer la couverture de tests ?
R : JaCoCo
DevOps Chapitre 6 : Les tests dans DevOps
1. Introduction
• Dans une équipe Scrum, le testeur (ingénieur qualité) vérifie la qualité du projet
à chaque itération.
• Son rôle : communiquer, convaincre, tester, automatiser, proposer des
solutions.
• La montée en compétence est essentielle.
2. Les types de tests
• Test unitaire : Vérifie une seule unité de code (fonction, méthode...).
• Test d’intégration : Vérifie le fonctionnement entre plusieurs modules.
• Test de régression : Assure qu’un changement n’a pas cassé une fonctionnalité
existante.
• Test de montée en charge : Mesure la capacité du système avec un grand
nombre d’utilisateurs.
• Test de sécurité : Vérifie que les données et accès sont protégés contre les
intrus.
3. Les tests dans le pipeline CI/CD
a. Intégration Continue (CI)
• Inclure des tests rapides (unitaires, qualité de code).
• L’ingénieur qualité automatise les rapports d’analyse.
b. Livraison Continue (CD)
• Ajouter des tests plus complexes (intégration...).
• Objectif : garantir un produit stable avant de livrer.
c. Déploiement Continu
• Tests en staging (identique à la production).
• Types de tests :
o Fonctionnels : Selenium
o UAT : tests d’acceptation utilisateurs
o Non-fonctionnels : performance (JMeter), sécurité (Fortify)
4. Tests Manuels vs Automatiques
• Tests manuels : lents, répétitifs, risque d’erreur.
• Tests automatiques : rapides, parallèles, gain de temps à long terme.
5. Test Unitaire
• Vérifie qu’une unité de code fonctionne comme attendu.
• Trois phases : Arrange, Act, Assert.
• Avantages : détection de bugs, non-régression, suivi de l’avancement (TDD).
6. Test-Driven Development (TDD)
1. Écrire un test qui échoue.
2. Écrire le code minimum pour qu’il passe.
3. Refactoriser le code/test.
7. JUnit (Java)
• Framework de test unitaire pour Java.
• Annotations : @Test, @BeforeEach, @AfterEach, @Order, etc.
• Fichier pom.xml contient les dépendances.
• Utilisation d’assertions : assertEquals, assertTrue, assertFalse, etc.
8. Mockito
• Utilisé pour créer des mocks (doubles d’objets).
• Permet d’isoler les tests unitaires sans utiliser la vraie base de données ou
services.
• Méthodes : when(), thenReturn(), verify().
9. Bonnes pratiques
• Vérifier les données insérées.
• Nettoyer la base de données après chaque test.
• Suivre des scénarios de test clairs et logiques.
🧠 Flashcards – Fiches de révision (Questions / Réponses)
🟦 Carte 1
Q : Quel est le rôle d’un ingénieur qualité dans une équipe DevOps ?
R : Assurer la qualité des livrables en testant à chaque étape du pipeline, automatiser,
communiquer et améliorer les processus.
🟦 Carte 2
Q : Cite 3 types de tests utilisés en DevOps.
R : Tests unitaires, tests d’intégration, tests de régression.
🟦 Carte 3
Q : Quelle est la différence entre un test unitaire et un test d’intégration ?
R : Le test unitaire teste une seule fonction, le test d’intégration teste la collaboration
entre plusieurs modules.
🟦 Carte 4
Q : Que veut dire CI/CD ?
R : Intégration Continue / Livraison ou Déploiement Continu.
🟦 Carte 5
Q : Quelle est l’utilité de Mockito ?
R : Créer des objets simulés pour isoler les tests sans dépendre de services externes
(BDD, API...).
🟦 Carte 6
Q : Citez 3 annotations JUnit utiles.
R : @Test, @BeforeEach, @SpringBootTest.
🟦 Carte 7
Q : Que signifie l’approche TDD ?
R : Écrire le test avant le code, corriger jusqu’à le faire réussir, puis améliorer.
🟦 Carte 8
Q : Quelle est la méthode JUnit pour vérifier une condition vraie ?
R : assertTrue(condition)
🟦 Carte 9
Q : Quel est le rôle de verify() dans Mockito ?
R : Vérifier qu’une méthode du mock a bien été appelée.
Notes Structurées – DevOps Chapitre 7 : Nexus
1. Introduction
• Une fois les modules développés et testés, l'application doit être déployée dans
les bons environnements.
• L’objectif est d’automatiser la gestion et le déploiement des artefacts.
• Nexus est un gestionnaire de dépôts permettant de stocker et partager les
artefacts.
2. Qu'est-ce que Nexus ?
• Nexus est une plateforme de gestion de dépôts.
• Il permet d’héberger des artefacts (JAR, WAR...) générés lors de la compilation.
• Intégration forte avec Maven pour la gestion des dépendances.
3. Caractéristiques de Nexus
• Stockage centralisé des composants d’un projet.
• Gestion des dépendances : versions correctes disponibles pour les
développeurs.
• Distribution sécurisée : fiabilité et sécurité des composants.
• Intégration DevOps : s’intègre dans les pipelines d’intégration et déploiement
continu.
• Amélioration des performances lors de la construction et du déploiement.
4. Types de Dépôts Nexus
• Hosted (Hébergé) :
o 3rd Party : bibliothèques externes.
o Releases : versions stables.
o Snapshots : versions en cours de développement.
• Proxy : miroir de dépôts publics (ex. Maven Central).
• Group : regroupe plusieurs dépôts pour faciliter l’accès.
5. Release vs Snapshot
• Release : version stable, prête pour la production.
• Snapshot : version temporaire en cours de développement, pour tests ou
validation.
6. Installation de Nexus (avec Docker)
1. Télécharger l’image :
docker pull sonatype/nexus3
2. Lancer le conteneur :
docker run -d --name nexus -p 8081:8081 sonatype/nexus3
3. Vérifier les logs :
docker logs -f nexus
4. Accéder à l’interface Web :
http://<adresse-ip-vm>:8081
7. Configuration de Nexus
• Connexion : utilisateur admin, mot de passe via docker exec et cat.
• Modifier le mot de passe, autoriser l’accès anonyme.
• Modifier le fichier settings.xml de Maven pour ajouter les identifiants.
• Modifier le fichier pom.xml pour pointer vers le dépôt Nexus :
<distributionManagement>
<repository>
<id>deploymentRepo</id>
<url>http://localhost:8081/repository/maven-releases/</url>
</repository>
</distributionManagement>
8. Intégration avec Jenkins
• Jenkins automatise la compilation et le déploiement vers Nexus.
• Ajouter une étape Jenkins avec la commande :
mvn deploy -DskipTests
🧠 Fiches de Révision – Flashcards en Français
Carte 1
Q : Qu'est-ce que Nexus ?
R : C’est un gestionnaire de dépôts pour stocker, gérer et partager des artefacts
logiciels.
Carte 2
Q : Quels sont les trois types de dépôts Nexus hébergés ?
R : 3rd Party, Releases, Snapshots.
Carte 3
Q : Quelle est la différence entre une version Release et une version Snapshot ?
R : Release = version stable. Snapshot = version en cours de développement.
Carte 4
Q : Quelle commande permet de télécharger l’image Docker de Nexus ?
R : docker pull sonatype/nexus3
Carte 5
Q : Quelle est l’URL par défaut de l’interface Web de Nexus ?
R : http://<adresse-ip-vm>:8081
Carte 6
Q : Quel fichier Maven doit être modifié pour ajouter les identifiants Nexus ?
R : settings.xml
Carte 7
Q : Comment Jenkins déploie-t-il automatiquement sur Nexus ?
R : En exécutant la commande mvn deploy dans un pipeline Jenkins.