A.
Git – Contrôle de version
1. Principes et outils
○ Systèmes distribués (Git) versus centralisés (CVS, SVN).
○ Chaque clone embarque tout l’historique.
2. Initialisation et configuration
○ git init → crée le dépôt local (dossier .git).
○ git config user.name|email → identité des commits.
○ Toujours prévoir un README.md et un .gitignore.
3. Cycle de vie d’un changement
○ git add <fichiers> → staging.
○ git commit -m "message" → snapshot local.
○ git status → état des modifications.
4. Historique et comparaison
○ git log → liste chronologique des commits.
○ git diff [<base>..<comparé>] → différences entre états.
○ git show <commit> → détails d’un commit.
5. Branches et fusions
○ git branch → lister ; git branch <nom> → créer.
○ git checkout <nom> / git switch <nom> → basculer.
○ git merge <branche> → fusionner, ou git rebase.
○ Workflow conseillé : une branche par fonctionnalité (“feature-branch”).
6. Dépôts distants
○ git remote add origin <url> → lier un dépôt distant (GitHub,
GitLab…).
○ git push -u origin <branche> → publier.
○ git pull / git fetch && git merge → récupérer et intégrer.
7. Intégration dans l’IDE
○ VS Code, IntelliJ, Eclipse… intègrent nativement un client Git.
○ Opérations de commit/push/pull, annotation et résolution de conflits en GUI.
B. DevOps 1 – Introduction au DevOps
● Objectifs : rapprocher développement et exploitation, accélérer les livraisons,
améliorer la qualité et la réactivité.
● Méthodologies : du cycle en V (RUP) à l’agilité (Scrum, XP), déploiement itératif.
● Architecture : monolithe vs micro-services, conteneurisation, orchestration.
● Outils clés du module :
○ VirtualBox / Vagrant
○ Git, Jenkins, Docker (Engine & Compose)
○ SonarQube, Nexus
○ Prometheus / Grafana
CI / CD
1. Intégration Continue (Continuous Integration)
Fusion fréquente des modifications dans la branche principale, déclenchement
automatique des builds, tests unitaires et analyses de qualité.
2. Livraison Continue (Continuous Delivery)
L’ensemble du chemin de validation (build + tests + packaging) est automatisé ; le
déploiement en production reste manuel et sous contrôle.
3. Déploiement Continu (Continuous Deployment)
Chaque modification validée automatiquement est directement déployée en
production, sans intervention humaine.
Les environnements
1. Environnement de développement
Poste local des développeurs pour écrire et tester le code.
2. Environnement d’intégration
Validation de la cohérence entre composants et branches avant les tests métier.
3. Environnement de recette utilisateur
Tests fonctionnels et acceptation par les utilisateurs finaux.
4. Environnement de qualification
Checks techniques et fonctionnels automatisés selon un référentiel de qualité.
5. Environnement de pré-production
Miroir de la production pour essais à l’échelle quasi réelle.
6. Environnement de production
Infrastructure en service, accessible aux utilisateurs finaux.
C. DevOps 2 – Intégration Continue avec
Jenkins
1. Concept de la CI
Automatisation du build et des tests à chaque commit pour détecter tôt les
régressions.
2. Jenkins
○ Serveur Java open-source, interface web.
○ Plugins pour Git, Maven, SonarQube, Docker, Pipeline…
3. Jobs et Pipelines
○ Freestyle vs Pipeline (déclaré en Jenkinsfile).
○ Multibranche, déclencheurs, étapes de build/test, post-actions (notifications).
4. Cycle d’un build
Récupération du code → Compilation → Tests unitaires (JUnit) → Analyse qualité
(SonarQube) → Packaging → Publication (Nexus).
5. Retour d’état
Dashboard coloré, historique des exécutions, alertes en cas d’échec.
D. Docker – Commandes et Dockerfile
Gestion d’images et de conteneurs
docker pull <image> # télécharger une image
docker images # lister les images
docker run -d -p hôte:conteneur --name mon_ctr image:tag
docker ps # conteneurs en cours
docker stop|rm <ctr> # arrêter / supprimer
docker exec -it <ctr> /bin/bash # shell dans le conteneur
Volumes et réseaux
○ -v /chemin/host:/chemin/ctr → partage de données
○ --network nom_reseau → rattacher à un réseau docker
Construction d’images
docker build -t nom_image:tag .
Fichier Dockerfile
FROM <image_base>
RUN <commande> # shell ou exec form
COPY <src> <dst>
ADD <src> <dst>
ENV KEY=val
EXPOSE <port>
VOLUME <chemin>
WORKDIR <répertoire>
USER <utilisateur>
ENTRYPOINT ["…"]
CMD ["…"]
2.
3. Bonnes pratiques
○ Minimiser les couches
○ Utiliser .dockerignore
○ Taguer et documenter clairement les images
E. DevOps 5 – SonarQube
1. Objectif
Analyse statique du code pour repérer bugs, vulnérabilités et “code smells”.
2. Fonctionnalités
Multi-langages, règles personnalisables, métriques (duplications, couverture,
complexité), historique.
Mise en place
docker pull sonarqube
docker run -d --name sonarqube -p 9000:9000 sonarqube
3. → accès http://<serveur>:9000 (admin/admin → changer le mot de passe).
4. Intégration CI
Ajout d’un stage Maven sonar:sonar ou étape de pipeline pour lancer l’analyse
automatiquement.
5. Exploration des rapports
Dashboard web : bugs, vulnérabilités, hotspots, couverture de tests, tendances.
F. DevOps 6 – Testing within DevOps
1. Rôle du testing
Qualité garantie tout au long du pipeline CI/CD.
2. Types de tests
○ Unitaires (JUnit, NUnit…)
○ Intégration (assemblage de modules)
○ Régression (vérification après modification)
○ Performance / Montée en charge
○ Sécurité (scans, fuzzing)
3. Automatisation
○ Exécution systématique en CI
○ Rapports clairs intégrés au pipeline
○ Balance vitesse de build vs couverture
G. DevOps 7 – Nexus Repository
Manager
1. Finalité
Gestion centralisée des artefacts (bibliothèques, packages, images Docker…).
2. Fonctionnalités
○ Dépôts hébergés (hosted), proxy (caching), regroupés (group).
○ Séparation des versions “snapshots” vs “releases”.
○ Contrôle d’accès et journaux.
Installation
docker pull sonatype/nexus3
docker run -d --name nexus -p 8081:8081 sonatype/nexus3
3. → accès http://<serveur>:8081 (admin/admin → sécuriser).
4. Connexion Maven
Paramétrage de settings.xml et pom.xml pour déployer automatiquement les
artefacts via la phase mvn deploy.
5. Intégration CI/CD
Un stage Jenkins mvn deploy publie les builds vers Nexus dès qu’ils sont validés.