Un déploiement excitant, c'est un déploiement risqué. « Ça marche chez moi » veut dire que l'environnement n'est pas reproductible ; une mise en prod stressante veut dire qu'il n'y a pas de filet. L'objectif : pouvoir déployer un vendredi à 17h sans y penser.
La même commande produit le même résultat, partout. Zéro étape manuelle, zéro « il faut aussi penser à… ».
Un merge sur main déclenche build, tests, déploiement. L'humain ne copie plus de fichiers à la main.
Tu sais en temps réel si le déploiement s'est bien passé — health checks, logs, métriques — sans attendre un ticket client.
Un rollback en une commande. La question n'est pas « est-ce que ça va marcher » mais « en combien de temps je reviens en arrière ».
Une infra cliquée à la main dans la console n'est pas reproductible et personne ne sait ce qui a changé. En Terraform, l'infra devient du code : versionné, relu en pull request, recréable à l'identique.
Le principe clé : le même script de déploiement tourne en CI et en local. Pas de logique secrète cachée dans l'interface GitHub — si la CI tombe, tu lances le script à la main et tu obtiens le même résultat.
La nouvelle version ne prend le trafic qu'après avoir prouvé qu'elle est vivante. Le load balancer interroge un endpoint /health ; tant qu'il ne répond pas 200, l'ancienne version reste en place.
Avec un déploiement blue-green ou rolling, la bascule est progressive : si le /health échoue, rien ne bascule et l'utilisateur ne voit rien. Le rollback devient un non-sujet.
Côté applicatif, la même logique d'observabilité vaut pour l'IA : je détaille le traçage dans tracer et scorer un agent.
J'ai évoqué le blue-green plus haut ; en pratique je choisis entre deux stratégies selon le risque. En blue-green, deux environnements identiques tournent en parallèle : je bascule 100% du trafic de « blue » vers « green » d'un coup, et le rollback est un simple retour de trafic vers « blue » resté debout. En canary, je décale le trafic par paliers — 5%, puis 25%, puis 100% — et je n'avance que si les erreurs et la latence restent saines.
Bascule instantanée, rollback instantané.
Exposition graduelle, blast radius plafonné.
Ma règle : blue-green quand le rollback instantané prime et que le trafic est prévisible ; canary quand je veux valider une version risquée sur un vrai échantillon avant de l'exposer à tous. Les deux se gèrent sur AWS avec CodeDeploy et le décalage de trafic de l'ELB.
Le /health que j'ai montré plus haut cache en réalité deux questions différentes, et Kubernetes les sépare explicitement avec ses probes liveness, readiness et startup. La readiness dit « je peux recevoir du trafic maintenant » (DB connectée, cache chaud) : si elle échoue, on me retire du load balancer sans me tuer. La liveness dit « je suis vivant, ne me redémarre pas » : si elle échoue, on redémarre le conteneur. Confondre les deux mène à des redémarrages en boucle dès qu'une dépendance ralentit.
Piège classique : mettre les dépendances dans la liveness. Si la base a un hoquet de 30s, toutes tes instances échouent la liveness en même temps, se font redémarrer en même temps, et tu transformes une lenteur passagère en panne totale. La liveness doit rester locale au process.
« Ennuyeux » n'est pas qu'un ressenti, ça se mesure. Les métriques DORA — issues de six ans de recherche Google — capturent à la fois la vélocité et la stabilité d'une chaîne de livraison. La contre-intuition clé du rapport : vitesse et stabilité ne sont pas un compromis, les meilleures équipes déploient plus souvent ET récupèrent plus vite.
Note : DORA a fait évoluer son modèle vers cinq métriques (en ajoutant un « rework rate »), mais ces quatre-là restent le socle. Je les instrumente comme le reste — métriques, logs et traces — dans la lignée des trois signaux d'OpenTelemetry.
Load balancer, auto-scaling, read replicas, cache — dimensionnés juste pour encaisser un pic.
Ancrer sur des données réelles, function calling, garde-fous : sortir de la fiction crédible.