🚀 Continuous Delivery (CD)
Deploy Strategies & GitOps
🚦 Analogie : Le Changement de Roue (Déploiement)
Rolling Update : On change les roues d'un train les unes après les autres en pleine course. L'arrêt est invisible, mais les changements sont continus.
Blue/Green : On prépare un 2ème train identique sur une voie parallèle, on bascule l'aiguillage magiquement pour tous les passagers instantanément, et on démonte l'ancien train.
⚠️ Rappel : CI vs CD
L'usine de montage assemble et crashe-teste la voiture (CI). Le camion transporte la voiture parfaite chez le concessionnaire (CD - Delivery). Mais le client ne la conduit que lorsqu'on décide de lui donner officiellement les clés (Déploiement Continue).
📖 CI vs CD vs Continuous Deployment : Ne les confondez plus !
Beaucoup utilisent ces termes comme des synonymes, mais ils représentent des étapes de maturité différentes :
- Continuous Integration (CI) : Le code est buildé et testé automatiquement à chaque commit.
- Continuous Delivery (CD) : Le code est prêt à être déployé en production à TOUT MOMENT, mais le clic final est manuel (décision business).
- Continuous Deployment : Chaque commit qui passe les tests est déployé automatiquement en production, sans intervention humaine.
En CD, la production est un simple artefact que l'on promeut.
💡 Le saviez-vous ? Déployer un Vendredi après-midi ?
Dans les entreprises traditionnelles, c'est interdit (le "Friday Deploy" est tabou). En DevOps mature avec CD, c'est un non-événement.
Pourquoi ? Parce que les outils de CD permettent un Rollback instantané et une isolation du trafic (Canary). Si le déploiement de 17h échoue, le système revient en arrière automatiquement en 30 secondes sans que les Ops ne sacrifient leur week-end.
📊 A. Comparatif des Stratégies
| Stratégie | Risque | Rollback | Coût | Cas d'usage |
|---|---|---|---|---|
| Rolling Update | Moyen | Lent | Faible | Défaut K8s |
| Blue/Green | Faible | Instant | 2x infra | Critique, besoin rollback rapide |
| Canary | Faible | Rapide | Moyen | Test sur users réels |
| Recreate | Élevé | Lent | Faible | Dev, non-prod |
🎮 Simulateur de Déploiement (Cliquez pour tester)
🔍 Stratégies de Déploiement Avancées
Le code est déployé en prod mais reste invisible pour les utilisateurs. On l'active via une config (Feature Flag) pour certains segments d'utilisateurs. Permet de tester la performance en prod sans risque métier.
Le trafic réel est dupliqué vers la nouvelle version, mais les réponses ne sont pas renvoyées aux clients. On compare les sorties de V1 et V2 pour s'assurer que V2 est stable (parfait pour les migrations de DB ou refactos complexes).
📊 Cas d'étude : Amazon - Un déploiement toutes les 11.6 secondes
Contexte : En 2001, Amazon était un monolithe. Un changement mineur pouvait bloquer des centaines de développeurs pendant des semaines.
Transformation :
- Two-Pizza Teams : De petites équipes autonomes de 6-10 personnes gèrent un service de bout en bout.
- Apollo : Création de leur propre outil de CD (devenu AWS CodeDeploy) pour automatiser chaque étape.
- Service-Oriented Architecture (SOA) : Chaque service cache sa complexité derrière une API.
Résultat : En 2011 (déjà !), Amazon effectuait 1.079 déploiements par heure en moyenne sur ses jours de semaine. Aujourd'hui, ce chiffre est bien plus élevé.
🔄 À Retenir - Continuous Delivery
- Automatisation Totale : Si un humain intervient manuellement, ce n'est pas du CD.
- Infrastructure-as-Code : Le déploiement doit inclure les changements d'infra (VPC, DB, LB).
- Observabilité : On ne déploie pas sans Dashboard. Si les erreurs montent, on rollback.
- Rollback Automatique : Le succès d'un déploiement n'est pas le "Finish", c'est le maintien des métriques stables.
🔄 B. Promotion d'Environnements
🔄 C. GitOps - Git comme Source de Vérité
GitOps est une évolution du CD où l'état désiré de l'infrastructure et des applications est déclaré dans Git, et un agent automatique synchronise continuellement l'état réel du cluster avec ce qui est dans Git.
"If it's not in Git, it doesn't exist in production."
🔱 ArgoCD
- Pull-based : Argo surveille Git et applique les changements sur K8s
- Web UI : Dashboard visuel de l'état de sync
- Auto-sync : Peut corriger automatiquement les drifts
- RBAC : Contrôle d'accès granulaire par app/projet
- Idéal pour : Multi-tenant, équipes multiples
🌊 FluxCD
- GitOps Toolkit : Composable, modulaire
- Multi-source : Git, Helm repos, OCI registries
- Image automation : Met à jour Git quand une nouvelle image est push
- Progressive delivery : Intégré avec Flagger (Canary)
- Idéal pour : Pipelines complexes, automatisation poussée
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: myapp namespace: argocd spec: project: default source: repoURL: https://github.com/org/repo targetRevision: main path: k8s/prod destination: server: https://kubernetes.default.svc namespace: production syncPolicy: automated: prune: true # Supprimer ressources obsolètes selfHeal: true # Corriger les drifts manuels
Avec GitOps, les développeurs ne déploient plus directement sur le cluster (pas de
kubectl apply).
Ils font une PR sur Git. Cela crée un audit trail complet et permet des approvals
formels
avant tout déploiement en production.
🚩 D. Feature Flags & Progressive Delivery
🎚️ Feature Toggles
Déployez le code en prod, mais activez la fonctionnalité seulement pour certains utilisateurs via une configuration externe.
- Kill Switch : Désactiver une feature cassée sans redéployer
- A/B Testing : 50% users version A, 50% version B
- Canary Users : Beta testers internes d'abord
- Gradual Rollout : 5% → 25% → 100%
const featureEnabled = await launchDarkly .variation('new-checkout', user, false); if (featureEnabled) { // Nouvelle expérience checkout return renderNewCheckout(); } else { // Ancienne version stable return renderOldCheckout(); }
⏮️ E. Stratégies de Rollback
| Scénario | Stratégie | Défi |
|---|---|---|
| App Stateless | Rollback image K8s instantané | Aucun |
| App + Migration DB | Backward-compatible migrations | Schéma doit supporter V1 et V2 |
| Breaking change DB | Blue/Green avec DB snapshot | Coûteux, perte de données post-deploy |
| Feature Flag activée | Toggle OFF via dashboard | Instant, sans redéploiement |
Règle d'or : toute migration doit être forward ET backward compatible. Exemple : Ajouter une colonne ? Rendez-la
NULL d'abord. Supprimer une colonne ?
Laissez-la 2-3 versions avant de la drop réellement (expand/contract pattern).
🛑 Troubleshooting : Le Rollback qui aggrave la situation
- Symptôme : La nouvelle version plante en Prod. Vous lancez un Rollback sur la version précédente, mais l'application crashe complètement cette fois-ci !
- Diagnostic : Le code de la V2 a modifié le schéma de la base de données (ajout d'une contrainte NOT NULL, renommage d'une table) rendant le code de la V1 incompatible avec la nouvelle structure de données.
- Remède : Découplez les changements de schéma des changements de code applicatif. Déployez le nouveau schéma d'abord de manière compatible (voir pattern expand/contract), puis le code V2 ensuite. Si V2 plante, V1 fonctionnera toujours avec le schéma étendu.
📊 Cas d'étude : Netflix - Spinnaker, le CD à l'échelle mondiale
Contexte : Netflix sert 220M+ abonnés mondiaux avec des pics massifs (ex: lancement Stranger Things). Un déploiement raté = millions de $ perdus.
Solution : Netflix a créé Spinnaker, un outil CD open-source multi-cloud.
- Canary Analysis automatique : Compare les métriques (latence, erreurs) entre Canary et Baseline. Si divergence > seuil, rollback auto.
- Red/Black Deploy : Variante de Blue/Green adaptée à AWS avec ELB switching.
- Chaos Engineering : Simian Army (Chaos Monkey) teste la résilience en tuant des instances aléatoirement, même en prod.
Résultat : Netflix peut déployer une nouvelle version en 16 minutes à l'échelle mondiale avec un taux d'échec < 0.01%.
📊 Cas d'étude : Etsy - "Deploy on Day One"
Philosophie : Chez Etsy, un nouveau développeur doit déployer en production le premier jour. Cela force la compagnie à avoir un pipeline CD ultra-safe et accessible.
Pratiques clés :
- Feature Flags partout : Aucun code ne va en prod sans flag. Les juniors peuvent déployer sans risque.
- Dashboards en temps réel : Chaque développeur suit les métriques métier post-deploy (taux de conversion, erreurs).
- Try/Buy/Build : Prioriser les outils existants avant de construire.
Impact culturel : Les développeurs se sentent responsables du code en production dès J+1, ce qui renforce la qualité et la confiance.
🔄 À Retenir - Continuous Delivery
- Automatisation Totale : Si un humain intervient manuellement, ce n'est pas du CD.
- Infrastructure-as-Code : Le déploiement doit inclure les changements d'infra (VPC, DB, LB).
- Observabilité : On ne déploie pas sans Dashboard. Si les erreurs montent, on rollback.
- Rollback Automatique : Le succès d'un déploiement n'est pas le "Finish", c'est le maintien des métriques stables.
- GitOps : Git devient la source de vérité unique. Audit, sécurité, traçabilité garantis.
- Feature Flags : Séparez le déploiement de code (deploy) de l'activation de fonctionnalité (release).