
Serpent Team

Andrew Hanna

Réponse courte : la rétro-promotion est la fusion qui ramène un changement de production vers chaque branche et chaque org situés plus bas dans votre pipeline. Elle est nécessaire parce qu'un correctif appliqué directement en production n'existe nulle part ailleurs : la prochaine livraison ordinaire l'écrase en silence. La façon sûre de l'automatiser est une fusion en cascade, un environnement à la fois, ouverte en pull request plutôt que poussée par un script.
Une promotion normale fait remonter un changement : dev vers
integration, puis uat, puis main. La
rétro-promotion va dans l'autre sens : elle prend ce qui existe déjà dans un
environnement supérieur et le fusionne vers le bas, pour que les environnements
inférieurs correspondent.
Deux choses doivent voyager, et la plupart des équipes n'en font qu'une :
Parce qu'un correctif casse l'hypothèse sur laquelle repose votre pipeline : la production ne reçoit que ce qui est monté par la chaîne. Cassez cette hypothèse et trois défaillances suivent.
Les changements hors circuit ne sont pas que des correctifs. Une mise en page modifiée en production pendant un incident, une valeur de liste ajoutée pour le support, un champ créé pour débloquer un utilisateur : tous ont besoin du même chemin de retour.
C'est la partie que la plupart des guides sautent. La rétro-promotion échoue de façon prévisible, et cinq règles évitent presque tout.
main dans uat, puis uat dans
integration, puis integration dans dev.
Fusionner main directement dans dev laisse les branches
sautées en conflit plus tard.
La rétro-promotion n'est pas un problème de déploiement. C'est un problème d'hygiène de branches qui se manifeste en problème de déploiement trois semaines plus tard.
main, jamais de dev, pour que le correctif
n'emporte rien de non livré.
main. Le
pipeline ouvre automatiquement une pull request de rétro-promotion vers la branche
immédiatement inférieure.
Non, et le croire est une erreur fréquente et coûteuse. Un rafraîchissement remplace la sandbox par une copie de la production, ce qui fait bien descendre le correctif, et détruit au passage tout changement non livré présent dans cette sandbox. Les rafraîchissements sont aussi rationnés : une sandbox Full ne peut être rafraîchie que tous les 29 jours (Salesforce Help), c'est donc un événement planifié, pas une réponse à incident.
Servez-vous des rafraîchissements pour réinitialiser les données et la dérive de long terme. Servez-vous de la rétro-promotion pour aligner code et orgs entre deux. La plupart des plateformes DevOps Salesforce prennent en charge cette logique sous une forme ou une autre, dont Copado, Gearset, AutoRABIT, Flosum, Blue Canvas et Salto. Ce qui varie, c'est le caractère automatique de la cascade et son arrivée sous forme de pull request révisable.
Quelle différence entre promotion et rétro-promotion ?
La promotion fait remonter un changement vers la production. La rétro-promotion fait redescendre un changement déjà présent en haut, pour que les environnements inférieurs cessent de dériver.
La rétro-promotion doit-elle être entièrement automatique ?
Le déclencheur et la pull request, oui. La fusion elle-même doit rester approuvée, car un conflit résolu sans revue est exactement la façon dont un correctif est annulé deux fois.
Comment gérer un conflit pendant la rétro-promotion ?
Résolvez-le dans la branche de rétro-promotion, en faveur du comportement de production, et faites confirmer par l'auteur du correctif. Ne résolvez jamais en reprenant la branche basse en bloc.
La rétro-promotion est-elle utile si personne ne modifie la production directement ?
Oui, mais moins souvent. Les branches de release à longue durée de vie, les livraisons annulées et les versions correctives de packages placent tous des changements en haut que le bas n'a pas.
D'autres playbooks pas à pas se trouvent dans la bibliothèque SF Guides. Si votre pipeline n'ouvre pas encore la cascade pour vous, commencez par la règle deux : un cran à la fois, dans l'ordre. La rétro-promotion cesse alors d'être la tâche dont personne ne veut.
Sans engagement.