Concepts

Design CI/CD

Concevoir des pipelines CI/CD robustes — du commit à la production

cicdpipelinedéploiementintegration-continuelivraison-continue

CI vs CD vs CD

ConceptSignificationAutomatise
CI — Continuous IntegrationMerger fréquemment, build + tests automatiquesBuild, lint, tests
CD — Continuous DeliveryChaque commit est prêt à être déployé+ staging, approval gates
CD — Continuous DeploymentChaque commit est automatiquement déployé+ production, no gates

Anatomie d'un pipeline

Commit → Lint → Build → Test → Scan → Stage → Approve → Deploy
  │        │       │       │       │       │        │         │
  │        │       │       │       │       │        │         └─ Production
  │        │       │       │       │       │        └─ Gate manuel (optionnel)
  │        │       │       │       │       └─ Environnement de pré-prod
  │        │       │       │       └─ SAST, dependency scan, container scan
  │        │       │       └─ Unit, integration, e2e
  │        │       └─ Compilation, bundling, containerisation
  │        └─ ESLint, Prettier, shellcheck
  └─ Push / PR / merge

Stratégies de déploiement

Rolling Update

Remplacement progressif des instances. Zero downtime.

v1 v1 v1 v1    (état initial)
v2 v1 v1 v1    (1/4 mis à jour)
v2 v2 v1 v1    (2/4 mis à jour)
v2 v2 v2 v1    (3/4 mis à jour)
v2 v2 v2 v2    (déploiement terminé)

Avantages : simple, zero downtime Risques : 2 versions coexistent temporairement

Blue-Green

Deux environnements identiques. Le switch est instantané.

Avant :  LB → [Blue v1] ←── trafic
              [Green idle]

Après :  LB → [Blue v1]
              [Green v2] ←── trafic (switch DNS/LB)

Avantages : rollback instantané, pas de coexistence Risques : double le coût d'infra

Canary

Envoyer un petit % du trafic vers la nouvelle version.

v1 ←── 95% du trafic
v2 ←──  5% du trafic (canary)

Si OK → augmenter progressivement
Si KO → rollback immédiat

Avantages : risque minimal, validation en production réelle Risques : plus complexe à implémenter


Bonnes pratiques

Pipeline

  • Fail fast : les étapes rapides en premier (lint avant les tests e2e)
  • Paralléliser : tests unitaires en parallèle des tests d'integration
  • Cache : dependencies, images Docker, artefacts
  • Idempotent : relancer le pipeline doit produire le même résultat
  • Immutable artifacts : un artefact build une fois, déployé partout

Sécurité (DevSecOps)

  • Shift left : intégrer la sécurité tôt dans le pipeline
  • SAST : analyse statique du code (Semgrep, SonarQube)
  • SCA : scan des dépendances (Dependabot, Snyk)
  • Container scanning : vulnérabilités dans les images Docker (Trivy)
  • Secret detection : empêcher les commits de secrets (git-secrets, truffleHog)

Environnements

Dev → Staging → Production

Dev       : chaque dev, données synthétiques
Staging   : réplique de prod, données anonymisées
Production: le vrai deal

Feature Flags

Découpler le déploiement de la release :

Déploiement : le code est en production
Release     : la fonctionnalité est activée pour les utilisateurs
  • Activer progressivement (1% → 10% → 50% → 100%)
  • Tester en production sans risque
  • Kill switch instantané en cas de problème
  • A/B testing natif