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.

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.

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.

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 testGitLab 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.