Cloudflare Workers disposait déjà d'URL de version pour des versions téléversées spécifiques, mais celles-ci ne pouvaient pointer que vers des ressources de production et ne créaient pas d'environnement isolé par modification ; tester en toute sécurité une modification plus importante impliquait donc de risquer l'état partagé de préproduction ou de déployer un Worker distinct par environnement. À mesure que le développement assisté par agents faisait passer davantage de modifications, et de plus grande ampleur, dans le pipeline, il fallait effectuer davantage de tests avant la fusion, sans ralentir les agents.
Worker Previews étend le modèle de branche au-delà du code : exécuter npx wrangler preview sur n'importe quelle branche crée un environnement isolé doté de sa propre URL et de sa propre configuration, héritant d'une configuration de base qui peut être remplacée par branche. Le problème plus délicat concernait l'état. Les Durable Objects reposent sur un modèle singleton où une instance possède son stockage ; un Preview partageant l'espace de noms de la production pourrait donc permettre à une migration échouée de modifier le trafic en direct. La correction consiste à créer un nouvel espace de noms Durable Object pour chaque Preview, résolu via ctx.exports afin qu'un code identique atteigne des espaces de noms différents en production et dans un Preview.
Cloudflare a utilisé cette fonctionnalité en interne sur CloudflareOS, sa propre plateforme open source permettant aux agents de travailler avec des services comme Google, GitHub et Slack via des « Gatekeepers » à portée de permissions. Les bugs de Gatekeeper, les callbacks OAuth, les flux d'approbation et les interactions défectueuses entre états de permissions ne se manifestent que lorsque l'ensemble du système fonctionne ensemble ; l'équipe déploie donc un Preview isolé de CloudflareOS pour chaque modification en cours de revue, en exécutant le flux de travail complet avant la fusion.
Étendre le modèle de branches Git du code à l'environnement et à l'état
Le provisionnement automatique d'un nouvel espace de noms Durable Object et d'une nouvelle application Container pour chaque Preview élimine le mode de défaillance où un Preview pouvait modifier silencieusement le stockage servant le trafic de production.
La définition d'une configuration de base réutilisable dont héritent les Previews, avec des remplacements par branche, évite de reconfigurer les secrets et les liaisons depuis zéro pour chaque branche, comme l'exigeaient les environnements séparés.
L'utilisation en interne sur les Gatekeepers de CloudflareOS ciblait le cas où des tests de composants isolés ne peuvent pas détecter un bug, puisque celui-ci n'apparaît que lorsque OAuth, les permissions et les flux d'approbation fonctionnent ensemble.
Le cadrage de l'observabilité par Preview permet de diagnostiquer une défaillance à partir des traces et journaux de cette branche, au lieu qu'elle soit mélangée au trafic de production ou à d'autres modifications en cours.
Lorsque « fonctionne en préproduction, casse en production » se répète, rendez chaque environnement aussi peu coûteux et aussi isolé à provisionner qu'une branche de code, y compris les parties à état que la plupart des outils laissent partagées.
Cloudflare liste les lacunes restantes au lancement : une liaison de service appelée depuis un Preview appelle encore le déploiement de production du Worker lié plutôt qu'un Preview correspondant ; les Previews peuvent envoyer des messages aux Queues mais pas encore les consommer ; et les Previews de longue durée pour des environnements de préproduction ou d'assurance qualité persistants sont encore en cours de cadrage sur la base des retours de la bêta privée. Worker Previews est disponible dès maintenant sur l'ensemble de la plateforme Workers, les anciennes URL de version étant conservées comme mécanisme distinct et plus étroit pour pointer vers des versions téléversées spécifiques.
VÉRIFIEZ LES SOURCES
Les sources
- Introducing Worker Previews: isolated preview environments for every change your agent makes The Cloudflare Blog · blog.cloudflare.com ·