Aller au contenu

Cours pratique sur DevOps


Comprendre DevOps et découvrir Git

Ce cours fait l’objet d’une introduction avec une présentation sous forme de diaporama (slides libre office). Cette page concerne la mise en pratique.

Qu’est-ce que le DevOps ?

Imaginez que vous construisiez une cabane avec vos amis :

Souvent, ces deux groupes ne se parlent pas assez, et la cabane finit par s’effondrer (j’exagère un peu, c’est pour l’exemple).
Le DevOps, c’est apprendre à collaborer et automatiser les tâches pour que la cabane soit toujours solide.

Objectifs du DevOps :

  1. Collaboration : les développeurs et les administrateurs système travaillent ensemble.
  2. Automatisation :→ les tâches répétitives sont confiées à des scripts ou à des outils.
  3. Amélioration continue : chaque jour, la cabane devient plus solide.

Introduction à Git

Git, c’est comme une machine à remonter le temps (en ce qui concerne le code)

Vous pouvez :

Commandes de base de Git :

# Crée un nouveau projet Git dans un dossier
git init

# Vérifie l'état du projet
git status

# Ajoute tous les fichiers à la zone d'attente
git add .

# Crée une sauvegarde (commit) avec un message
git commit -m "Mon premier commit"

# Affiche l’historique des sauvegardes
git log

Chaque commit correspond à une photo de votre projet à un instant donné !


TP 1 : Votre premier dépôt Git (sauf si vous connaissez déjà)

  1. Créez un dossier cabane.
  2. Entrez dans le dossier avec cd cabane.
  3. Tapez les commandes suivantes :

    git init
    echo "Bonjour DevOps" > README.md
    git add .
    git commit -m "premier commit"
    
  4. Vérifiez avec git log.

Résultat attendu :

Un commit apparaît avec votre nom et votre message.


GitHub et GitLab

GitHub et GitLab sont des réseaux sociaux pour le code. Vous pouvez y déposer votre projet (push) et vos collègues peuvent le récupérer (clone).

Commandes essentielles :

# Connecter votre projet à GitHub
git remote add origin https://github.com/votre_pseudo/mon-projet.git

# Envoyer votre code
git push -u origin main

# Récupérer le projet d’un collègue
git clone https://github.com/collegue/projet.git

TP 2 : Partager votre projet

  1. Créez un compte GitHub (si ce n’est pas déjà fait).
  2. Créez un dépôt vide nommé cabane-devops.
  3. Connectez votre dépôt local :

    git remote add origin https://github.com/votre_pseudo/cabane-devops.git
    git branch -M main
    git push -u origin main
    
  4. Vérifiez que votre fichier apparaît bien en ligne.

Résultat attendu :

Votre projet est désormais sur GitHub.


Travailler en équipe avec Git

Les branches

Imaginez un arbre :

Chaque membre de l’équipe peut travailler sur sa branche, puis fusionner les changements par la suite.

Commandes principales :

# Créer une nouvelle branche
git branch ma-branche

# Aller sur une branche
git checkout ma-branche

# Créer et aller sur la branche en une seule commande
git checkout -b ma-branche

# Fusionner une branche dans main
git checkout main
git merge ma-branche

TP°3 : Travail à faire à 2

  1. Créez une branche ajouter-ami
  2. Ajoutez votre prénom dans le fichier amis.txt
  3. Faites un commit et poussez votre branche
  4. Votre binôme crée une branche ajouter-ami2 et fait la même chose
  5. Fusionnez vos branches dans main

Résultat attendu :

Le fichier amis.txt contient vos deux prénoms !


Résoudre un conflit

Remarque : Si deux personnes modifient la même ligne, Git ne sait pas quelle version garder et donc il y a conflit.

Exemple :

<<<<<<< HEAD
Bonjour
=======
Salut
>>>>>>> ajouter-ami

Vous devez choisir : garder Bonjour ou Salut ou les deux !


TP 4 : Provoquer un conflit

  1. Vous et votre binôme modifiez la même ligne d’un fichier
  2. Poussez vos branches respectives
  3. Fusionnez pour que Git vous demande de résoudre le conflit
  4. Ouvrez le fichier et corrigez-le

Résultat attendu :

Un texte final unique dans le fichier.


Découvrir Docker

Qu’est-ce que Docker ?

Docker, c’est comme une boîte magique qui contient votre application et tout ce dont elle a besoin pour fonctionner. Peu importe la machine et le système sur lequel vous déposez votre boite, elle fonctionnera de la même manière !


Commandes de base

# Voir les conteneurs qui tournent sur votre machine
docker ps

# Télécharger une image depuis le Docker Hub (ici, le serveur web open source NGINX)
# L'intérêt de ce serveur est qu'il utilise un proxy inverse (reverse proxy) qui se trouve devant le serveur web et reçoit toutes les requêtes avant qu’elles n’atteignent le serveur d’origine.
docker pull nginx

# Lancer votre conteneur sur le port 8080
docker run -d -p 8080:80 nginx

# Arrêter le conteneur
docker stop <id>

TP 5 : Votre premier conteneur avec Docker

  1. Lancez :

    docker run -d -p 8080:80 nginx
    
  2. Ouvrez votre navigateur : http://localhost:8080
  3. Vous verrez la page : Welcome to nginx !

Résultat attendu :

La page s’affiche normalement dans votre navigateur !


Créer votre propre image

Le fichier Dockerfile est une recette de cuisine pour construire votre application. En tant que développeur, il faut que nous sachions comment créer nos propres images.

Exemple :

FROM node:16
WORKDIR /app
COPY . .
RUN npm install
CMD ["node", "index.js"]

TP 6 : Construire votre boîte magique

  1. Créez une application Node.js simple (index.js).
  2. Écrivez un Dockerfile.
  3. Lancez :

    docker build -t monapp .
    docker run -p 3000:3000 monapp
    
  4. Allez sur http://localhost:3000.

Résultat attendu :

Votre application fonctionne depuis un conteneur.


Automatisation avec GitLab CI/CD

Qu’est-ce que CI/CD ?

Ces concepts sont abordés dans la partie présentation de DevOps (diaporama)

Ces pratiques permettent d’éviter les erreurs humaines et d’accélérer le développement.


Exemple d’un fichier .gitlab-ci.yml

Dans ce fichier, nous n’avons que 2 étapes, le build et le test. Cette exemple n’affiche rien d’autre que des messages mais il montre bien la mise en place d’un processus automatisé.

stages:
  - build
  - test

build:
  stage: build
  script:
    - echo "Je construis mon projet"

test:
  stage: test
  script:
    - echo "Je teste mon projet"

TP 7 : Votre premier pipeline GitLab

  1. Créez un projet sur GitLab.
  2. Ajoutez un fichier .gitlab-ci.yml.
  3. Poussez votre projet.
  4. Consultez le pipeline dans l’onglet CI/CD.

Résultat attendu :

Les jobs build et test s’exécutent avec succès (normalement ;))


Projets Fil Rouge + Monitoring (optionnel)

Pour les projets Fil Rouge, vous avez le choix entre la “ToDO liste”, la “Gestion du Panier”, “Waouf Waouf” étudié en UML ou autre.

Projet Fil Rouge n°1 : ToDoList

Créer une application web simple de type “to-do list”, intégrant un pipeline complet :

  1. Git : Travail collaboratif avec branches.
  2. Docker : Conteneurisation de l’application.
  3. GitLab CI/CD : Pipeline automatisé (build + test + déploiement).
  4. Déploiement : Application fonctionnelle sur un serveur local ou distant.
  5. Monitoring : Mise en place d’un tableau de bord Grafana (optionnel)

Chaque groupe présentera son projet en fin de journée.


Projet Fil Rouge n°2 : Gestion de Panier (approche UML déjà vu mais ici en mode DevOps)

Objectif : relier la modélisation UML à la chaîne DevOps !

  1. Étape 1 – Modélisation UML
    • Diagramme de cas d’utilisation : gérer un panier d’achat (ajouter, modifier, supprimer un article).
    • Diagramme de classes
    • Diagramme de séquence : ajout d’un article au panier.
  2. Étape 2 – Implémentation
    • Réalisation d’une API Java Spring Boot.
    • Stockage en base MySQL ou PostgreSQL (via Docker).
  3. Étape 3 – Automatisation
    • Versionner le code sur GitLab.
    • Mettre en place un pipeline simple .gitlab-ci.yml pour automatiser les tests et le déploiement.

Compétences mobilisées :


Projet Fil Rouge n°3 : Gestion des Chiens et Adhérents (Waouf Waouf)

Objectif : relier la modélisation UML à la chaîne DevOps !

Pour simplifier, vous pouvez utiliser vos propres modèles UML (Diagramme de classes ou celui de la correction) Nous n’allons pas encore mettre en place les diagrammes de séquences dont il est question mais simplement se limiter à :

  1. Étape 1 – Modélisation UML
    • Diagramme de cas d’utilisation : gérer la gestion d’un Adhérent et d’un Chien (Ajouter, modifier, supprimer, lister, rechercher).
    • Diagramme de classes
  2. Étape 2 – Implémentation
    • Réalisation d’une API REST Java Spring Boot.
    • Stockage en base MySQL ou PostgreSQL (via Docker).
  3. Étape 3 – Automatisation
    • Versionner le code sur GitLab.
    • Mettre en place un pipeline simple .gitlab-ci.yml pour automatiser les tests et le déploiement.

Compétences mobilisées :


Évaluation finale sur le projet

Bientôt… un QCM de 15/20 questions sur Git, Docker et CI/CD pour vous entrainer.


Auteur : Philippe Bouget