Aller au contenu

Main slides

Objectifs pédagogiques

  • Comprendre les concepts fondamentaux de la CI/CD
  • Configurer des pipelines avec GitLab CI et GitHub Actions
  • Comparer les forces et faiblesses de chaque outil
  • Mettre en place des workflows complexes (build, test, déploiement)
  • Implémenter des bonnes pratiques DevOps

Continuous Integration (CI)

L'intégration continue consiste à fusionner régulièrement (plusieurs fois par jour) les modifications de code des développeurs dans une branche principale.

Chaque intégration déclenche automatiquement :

  • La compilation du code
  • L'exécution des tests unitaires et d'intégration
  • L'analyse de la qualité du code
  • La vérification de sécurité

Objectifs : Détecter rapidement les bugs, réduire les conflits de merge, améliorer la qualité du code.


Continuous Delivery (CD)

La livraison continue étend la CI en automatisant le déploiement du code dans des environnements de test et de staging. Le code est toujours dans un état déployable.

Différence avec Continuous Deployment :

  • Delivery : Déploiement manuel en production après validation
  • Deployment : Déploiement automatique en production

Architecture d'un pipeline CI/CD

Composants clés :

  • Triggers : Événements qui déclenchent le pipeline (push, PR, tag, schedule)
  • Stages : Phases du pipeline (build, test, deploy)
  • Jobs : Tâches individuelles au sein d'un stage
  • Runners/Agents : Machines qui exécutent les jobs
  • Artifacts : Fichiers produits (binaires, images Docker, rapports)
  • Environnements : Cibles de déploiement (dev, staging, prod)

Avantages de la CI/CD

Pour les développeurs :

  • Feedback rapide sur la qualité du code
  • Moins de conflits de merge
  • Réduction du temps de debugging
  • Confiance dans les déploiements

Pour l'entreprise :

  • Time-to-market réduit
  • Qualité logicielle améliorée
  • Coûts de maintenance réduits
  • Déploiements plus fréquents et moins risqués

Présentation des outils - Gitlab CI/CD

Caractéristiques :

  • Intégré nativement dans GitLab
  • Configuration via fichier .gitlab-ci.yml
  • Runners auto-hébergés ou cloud
  • Registry Docker intégré
  • Interface web complète
# IMAGE : L'environnement Docker de base pour tous les jobs
# Ici, on prend une image qui contient DÉJÀ Python et Linux
image: python:3.9-slim

# STAGES : L'ordre des étapes
stages:
  - build
  - test

# JOB 1 : Préparation
installation:
  stage: build
  script:
    - echo "Installation des dépendances..."
    - pip install --upgrade pip
    # - pip install -r requirements.txt

  # ARTIFACTS : Pour passer le résultat au job suivant
  # (Car GitLab détruit le conteneur à la fin de chaque job !)
  artifacts:
    paths:
      - venv/
      - .cache/pip

# JOB 2 : Vérification
validation:
  stage: test
  script:
    - echo "Lancement des tests..."
    - python --version
    # - python -m unittest discover tests/

  # On précise qu'on a besoin de ce qui a été fait au stage précédent
  dependencies:
    - installation

Présentation des outils - GitHub Actions

Caractéristiques :

  • Intégré dans GitHub
  • Configuration via fichiers YAML dans .github/workflows/
  • Runners hébergés par GitHub ou auto-hébergés
  • Marketplace d'actions réutilisables (10 000+)
  • Intégration profonde avec l'écosystème GitHub
name: Mon Premier Pipeline CI

# DÉCLENCHEUR : Quand lancer ce pipeline ?
# Ici : à chaque "push" sur la branche "main"
on:
  push:
    branches: [ "main" ]

# JOBS : Les tâches à effectuer
jobs:
  test-app:
    # L'environnement : On demande une machine Ubuntu récente
    runs-on: ubuntu-latest

    steps:
      # ÉTAPE 1 : Récupérer le code du dépôt (indispensable)
      # "uses" appelle une action officielle du Marketplace
      - name: Récupération du code (Checkout)
        uses: actions/checkout@v3

      # ÉTAPE 2 : Installer Python sur la machine virtuelle
      - name: Installation de Python 3.9
        uses: actions/setup-python@v4
        with:
          python-version: '3.9'

      # ÉTAPE 3 : Installer les librairies (simulé ici)
      - name: Installation des dépendances
        run: |
          python -m pip install --upgrade pip
          # pip install -r requirements.txt (si le fichier existe)

      # ÉTAPE 4 : Lancer les tests
      - name: Exécution des tests unitaires
        run: |
          # Exemple simple : on vérifie juste la version pour l'instant
          python --version
          echo "Lancement des tests..."
          # python -m unittest discover tests/

☕️ Si tu souhaites soutenir mon travail, tu peux m'offrir un café ici.