CI/CD - Intégration et Déploiement Continus

Qu’est-ce que le CI/CD ?

Le CI/CD (Continuous Integration / Continuous Deployment) est une méthodologie DevOps qui permet d’automatiser les phases d’intégration, de test et de déploiement des applications. Cette approche permet de livrer des fonctionnalités plus rapidement et de manière plus fiable, elle présente différents bénéfices:

  • une réduction des risques grace à une détection précoce des bugs et problèmes d’intégration
  • des déploiements rapides et réguliers
  • une amélioration de la qualité grace à des tests automatisés systématiques
  • une collaboration renforcée avec un feedback rapide pour les équipes de développement

Intégration Continue (CI)

L’Intégration Continue consiste à intégrer régulièrement les modifications de code dans une branche principale, en déclenchant automatiquement :

  • Compilation du code
  • Exécution des tests automatisés (unitaires, intégration, etc.)
  • Analyse de qualité du code
  • Construction des artefacts (images Docker, packages, etc.)

Le schéma suivant montre le positionnement du processus de CI dans la chaine logicielle.

environments

Déploiement Continu (CD)

Le Déploiement Continu automatise la mise en production des applications validées par la CI :

  • Déploiement automatique vers les environnements de test, staging et production
  • Tests d’acceptation automatisés
  • Rollback automatique en cas de problème
  • Monitoring et alertes post-déploiement

Dans une approche CD traditionelle (legacy ?), l’outil d’intégration continu envoie les changements dans le cluster.

CD Push

L’approche GitOps à apporté une nouvelle façon de gérer l’étape de CD, en définissant un répository Git en tant que source de vérité (source of trust) et en permettant à un composant du cluster de venir récupérer les changements dans ce repository.

CD Pull

Principaux outils de l’écosystème

GitHub Actions : L’approche GitHub

GitHub Actions propose une approche intégrée directement dans la plateforme GitHub :

Caractéristiques principales

  • Workflows définis en YAML dans le dossier .github/workflows/
  • Événements déclencheurs : push, pull request, release, schedule, etc.
  • Runners : Machines virtuelles hébergées par GitHub ou self-hosted
  • Marketplace : Écosystème riche d’actions réutilisables
  • Matrice de builds : Tests sur plusieurs environnements simultanément

Exemple simple

name: CI
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
      - run: npm ci
      - run: npm test

GitLab CI/CD : L’approche GitLab

GitLab CI/CD offre une solution tout-en-un intégrée à la plateforme GitLab (en Saas ou on-premise):

Caractéristiques principales

  • Pipeline défini dans un fichier .gitlab-ci.yml
  • Runners : Agents d’exécution (shared, group, ou project-specific)
  • Stages : Organisation séquentielle des jobs
  • Artifacts : Partage de fichiers entre les jobs
  • Environments : Gestion des déploiements par environnement

Exemple simple

stages:
  - test
  - build
  - deploy

test:
  stage: test
  script:
    - npm ci
    - npm test

build:
  stage: build
  script:
    - docker build -t $CI_REGISTRY_IMAGE .

Visite guidée: vue d’ensemble de la pipeline CI/CD de la VotingApp

La VotingApp utilise une pipeline CI/CD dont la partie CI est effectuée dans GitLab et la partie CD par Argo CD via un repository de config.