Commit sur l'application de démo
Un événement Git lance le pipeline du lab. Envoyé à la main pour l'instant : pas de webhook public.
Mon lab prouve les contrôles canary et la promotion, mais la page qu'un visiteur peut ouvrir était livrée sans eux. Voici comment j'ai placé le même contrôle devant les deux : un commit, deux modes de livraison, une règle.
Faites glisser le dessin pour voir GitHub et l'edge Cloudflare. →
Dessinée par moi, pas une capture d'écran. Chaque trait a tourné dans un essai enregistré, et les points rouges rejouent une livraison sur chaque chemin. Les deux chemins aboutissent au même job GitHub Actions : le contrôle est écrit une seule fois et le token d'API Cloudflare n'entre jamais dans le cluster.
Dans le lab, une version passe par des canaries Argo Rollouts, une analyse de SLI sur le service mesh et la promotion Kargo, et une mauvaise version est annulée toute seule. Mais le lab faisait tourner une image d'exemple, et sa CI ne faisait que valider des manifestes.
La démo publique est mon propre Worker Cloudflare. GitHub Actions le testait, puis un script l'envoyait à l'edge avec une part du trafic saisie à la main. Rien ne mesurait la nouvelle version avant que tout le monde la reçoive.
Mode cloud : un push sur main ne lance que les tests. La livraison à l'edge est un déclenchement du même workflow, qui publie la nouvelle version à côté de l'ancienne avec une petite part du trafic, la mesure, puis la promeut ou l'annule. Déclenché à la main depuis main, il ne demande aucun lab : c'est la solution de repli quand le lab est arrêté.
Mode autogéré : Argo Workflows teste, construit et pousse l'image dans le lab. Kargo la promeut en dev puis en staging sous Rollouts et l'analyse du mesh, et seule une version vérifiée atteint l'étape de prod, qui déclenche la même livraison à l'edge. Le token d'API Cloudflare reste dans GitHub.
La règle est la même sur les deux chemins : promouvoir quand le taux de succès mesuré de la nouvelle version atteint l'objectif, annuler sinon, et pas de données signifie pas de promotion.
La nouvelle version reçoit 10 % du trafic. La version précédente garde le reste.
Le job envoie un nombre fixe de requêtes et ne compte que les réponses de la nouvelle version.
Il compare le taux de succès de la nouvelle version à l'objectif, le même que celui de l'analyse du lab.
Pas de données
Pas de promotion. La version précédente garde tout le trafic.
Sous l'objectif
Annulation. Tout le trafic revient à la version précédente.
À l'objectif ou au-dessus
Promotion. La nouvelle version reçoit tout le trafic.
Les deux chemins ont tourné de bout en bout, l'autogéré sur mon lab existant, pas sur une reconstruction à neuf.
Dans mon lab Kubernetes, avec Argo Workflows et Kargo.
Commit sur l'application de démo
Un événement Git lance le pipeline du lab. Envoyé à la main pour l'instant : pas de webhook public.
Argo Workflows : test, build, push
Un test en échec a bloqué le push : aucune image. BuildKit sans root, sans socket Docker.
2 min 33 s de l'événement à l'image
Registre dans le lab
L'image exécute le même code que l'edge, sur workerd.
Freight Kargo
Kargo transforme la nouvelle image du registre du lab en freight, une version candidate.
dev : premier déploiement
Un pod, sans analyse. Une freight qui tourne ici passe en staging.
staging : canary à 5 % sur le mesh
Argo Rollouts envoie 5 % du trafic à la nouvelle version par Linkerd, et l'analyse de SLI la mesure. Une version qui renvoie des 500 a mesuré 0 et a été arrêtée.
6 min 15 s de l'événement à la vérification en staging
Étape de prod Kargo
Je promeus à la main, et seulement une version vérifiée. La version arrêtée a été refusée : « Freight is not available to this Stage ». L'étape déclenche la livraison à l'edge avec cette version.
1 min 35 s de la promotion à 100 % à l'edge
GitHub Actions seulement, sans lab. La solution de repli quand le lab est arrêté.
Commit sur l'application de démo
Un push sur main lance le workflow.
GitHub Actions : test
Vérification des types et tests. Un push sur main s'arrête ici.
Déclenchement à la main depuis main
Livre la tête de main à l'edge, par le même contrôle.
Edge : canary, contrôle, promotion ou annulation
La nouvelle version reçoit 10 % du trafic. Le contrôle la mesure et décide.
49 sur 49 bonnes : promue en 10 s · 0 sur 50 bonnes : annulée en 9 s
Page de statut
Affiche la version en service, sa part du trafic et le dernier résultat du contrôle.
Rendu à partir des sorties enregistrées des essais, pas des captures d'écran : le journal GitHub Actions de l'essai à l'edge et le relevé du runbook pour l'essai du lab. Chaque valeur affichée vient de ces relevés. Le texte des vidéos est en anglais.
Les essais à l'edge sont passés par GitHub Actions depuis main sur le Worker en ligne, sans étape manuelle. L'essai du lab est parti d'un événement push envoyé à la main, et j'ai approuvé la promotion en prod ; cette attente n'est pas comptée. Le refus de la version cassée était un essai à blanc côté serveur : rien n'a été déclenché.