
Andrew Hanna

Andrew Hanna

Un déploiement delta n'envoie que les métadonnées modifiées entre deux références Git,
plutôt que le projet entier. On le calcule en comparant des commits, en générant un
package.xml à partir de ce diff, puis en déployant ce manifeste. C'est
plus rapide et moins risqué qu'un déploiement complet sur un point précis, et plus
fragile sur un autre: un paquet partiel peut échouer sur des dépendances qu'un paquet
complet satisfaisait par accident.
Un déploiement delta est un déploiement de métadonnées dont le manifeste provient d'un diff Git plutôt que de tout votre arbre source. Trois pièces mobiles:
package.xml listant uniquement les
composants ajoutés et modifiés, plus un destructiveChanges.xml listant
suppressions et renommages.
Rien là-dedans n'appartient aux éditeurs de DevOps. Tout outil proposant du delta, Serpent compris, exécute une variante des mêmes trois étapes.
La voie open source courante est sfdx-git-delta, le plugin que le blog Salesforce Developers a détaillé pour les sources non packagées. À noter: c'est un plugin non officiel, maintenu par la communauté, donc traitez-le comme une dépendance qui vous appartient.
sf sgd source delta --from origin/main --to HEAD --output-dir .
--generate-delta si vous voulez extraire aussi les fichiers
source modifiés. À n'utiliser que si --to vaut HEAD.
package.xml vide échoue, donc votre pipeline doit sauter l'étape plutôt
que tomber en erreur.
sf project deploy start -x package/package.xml --post-destructive-changes
destructiveChanges/destructiveChanges.xml
C'est la partie que les tutoriels sautent. Un déploiement complet embarque tous les composants, donc les dépendances implicites se résolvent en silence. Un delta n'embarque qu'un sous-ensemble, et chaque dépendance jusque-là invisible devient une erreur.
Ajoutez un champ dans le delta: son accès vit dans le profil, qui est un fichier distinct. Si ce fichier n'a pas changé, il n'est pas dans le delta, et le champ atterrit sur la cible sans que personne ne le voie. Le côté retrieve aggrave la chose: Salesforce ne renvoie que les paramètres de sécurité des types de métadonnées cités dans la requête, les permissions utilisateur, plages IP et heures de connexion étant toujours incluses. Déployez les profils délibérément, ne laissez pas le diff décider.
Supprimer une valeur de liste de sélection touche les types d'enregistrement et les traductions qui la référencent. sfdx-hardis a ajouté le delta avec dépendances exactement pour ce cas, car l'échec n'apparaît souvent pas dans le déploiement delta. Il apparaît au déploiement complet suivant, des semaines plus tard, dans un autre pipeline.
Si vous déployez une classe modifiée sous RunSpecifiedTests, sa classe de
test doit exister sur la cible et figurer dans la liste des tests. Un delta qui
contient la classe mais pas le test est un échec de couverture qui attend la
production.
Supprimer un flow via destructiveChanges.xml est une limite documentée de
la plateforme. Le contournement consiste à le désactiver d'abord en déployant un
FlowDefinition avec activeVersionNumber à zéro.
Étiquettes personnalisées, workflows et règles de correspondance regroupent de nombreux membres dans un fichier unique. Modifier une ligne marque tout le fichier comme changé, et les inclure de force exige l'historique Git complet, pas un clone superficiel.
Git voit un renommage comme une suppression suivie d'un ajout. Déployez-les dans le mauvais ordre et vous supprimez un composant encore référencé, ou vous créez un doublon. L'ordre post-destructif existe pour cela.
Un défaut utile, celui que livre sfdx-hardis, est: delta pour les branches de feature fusionnant vers une branche partagée, et déploiements complets entre environnements partagés. Le raisonnement: plus on remonte le pipeline, plus la cible risque d'avoir dérivé du contrôle de source, et un delta suppose que le contrôle de source dit vrai.
Passez en complet si l'un de ces points est vrai:
Gardez une surcharge manuelle. sfdx-hardis utilise un marqueur
NO_DELTA dans le titre du commit, un bon motif à reprendre quel que soit
l'outillage: celui qui sait qu'un changement est risqué doit pouvoir forcer un
déploiement complet sans toucher à la configuration du pipeline.
C'est cette dernière étape que les équipes abandonnent, et c'est elle qui attrape la famille de pannes listes de sélection et traductions avant qu'une release soit en jeu. D'autres playbooks de livraison Salesforce sont dans notre bibliothèque SF Guides.
Les déploiements delta sont-ils plus sûrs que les complets?
Ils sont plus rapides et touchent moins, ce qui réduit le rayon d'impact. Ils ne sont pas intrinsèquement plus sûrs, car un paquet partiel peut manquer une dépendance qu'un paquet complet aurait portée.
Ai-je besoin de sfdx-git-delta pour faire du delta?
Non. C'est la voie open source la plus répandue, non officielle et maintenue par la communauté. La plupart des plateformes DevOps commerciales calculent le delta pour vous.
Pourquoi mon paquet delta est-il vide en CI mais pas en local?
Presque toujours un clone superficiel. Votre checkout CI a besoin d'assez d'historique Git pour atteindre le commit de référence.
Comment supprimer des métadonnées dans un déploiement delta?
Via destructiveChanges.xml, appliqué après le paquet additif. Les flows
font exception: désactivez-les d'abord par un changement de FlowDefinition.
Les profils doivent-ils faire partie du delta?
Déployez-les délibérément plutôt que de laisser le diff trancher. Un fichier profil ne porte que les paramètres des types de métadonnées inclus dans le retrieve, donc un profil issu d'un diff est rarement celui que vous vouliez.
Sans engagement.