CI vs CD vs CD
| Concept | Signification | Automatise |
|---|---|---|
| CI — Continuous Integration | Merger fréquemment, build + tests automatiques | Build, lint, tests |
| CD — Continuous Delivery | Chaque commit est prêt à être déployé | + staging, approval gates |
| CD — Continuous Deployment | Chaque 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