
Serpent Team

Andrew Hanna

Kort antwoord: Salesforce heeft geen ongedaan-maken-knop. Een
productiedeployment die mislukt draait zichzelf terug, omdat
rollbackOnError in productie verplicht op true staat, maar een deployment
die slaagt en achteraf fout blijkt, moet je zelf terugdraaien. Je reele opties zijn
een omgekeerde deployment vanaf een snapshot van voor de release, een gerichte
destructive change, of een fix vooruit. Welke optie je hebt, bepaal je voor de
deployment, niet erna.
Salesforce schrijft metadata direct naar de org. Er is geen transactielog om terug te
draaien en geen vorige versie van de org om naar terug te schakelen. De Metadata API
biedt precies een vangnet, en dat dekt alleen echte mislukking: bij een
productiedeployment moet rollbackOnError op true staan, dus als een
component faalt wordt de hele deployment weggegooid en blijft de org zoals hij was (Salesforce Metadata API developer guide).
Dat vangnet doet niets voor het geval waar teams echt bang voor zijn. Een release die schoon deployt, alle tests haalt en om negen uur 's ochtends een bedrijfsproces breekt, is in Salesforce-termen geen mislukte deployment. Terugdraaien betekent een nieuwe deployment bouwen, en die kun je alleen bouwen uit iets dat je eerder hebt vastgelegd.
Hier hoort elk rollbackplan te beginnen, en juist hier zwijgen de meeste plannen. Verdeel je release in drie categorieen voordat je een stap opschrijft.
In die derde categorie lopen rollbackplannen stuk. Metadata-rollback herstelt configuratie, nooit data. Draaide je release een automatisering over 400.000 records, dan verandert het terugzetten van de Apex van gisteren daar niets aan.
De betrouwbaarste optie. Staat de branch die de release opleverde in Git, dan is de vorige commit je rollback-artefact. Je bouwt een pakket uit de laatste goede commit en deployt dat eroverheen. Dit dekt alleen componenten die de release wijzigde of toevoegde, dus combineer het met strategie drie.
Leg de staat van de doel-org vast vlak voor de deployment en gebruik die snapshot om het omgekeerde pakket te genereren. Dit dekt het geval waarin de org is afgedreven van Git, wat bij de meeste Salesforce-teams zo is. Tools in deze categorie automatiseren de vastlegging en de diff: Gearset, AutoRABIT en Blue Canvas documenteren allemaal rollback op basis van snapshots of restore, en Serpent levert one-click rollback op elk plan, ook het gratis plan.
Een omgekeerde deployment werkt componenten bij die al bestonden. Ze verwijdert niet
wat je release aanmaakte, dus een nieuw object of veld blijft staan tenzij je het
expliciet verwijdert. Dat vraagt om een destructiveChanges.xml-manifest,
een apart artefact dat je moet schrijven. Gebruik
destructiveChangesPre.xml om te verwijderen voordat de toevoegingen
landen en destructiveChangesPost.xml om erna te verwijderen, zo ontwar je
afhankelijkheden zoals een Apex-class die nog verwijst naar het object dat weg moet.
Vaak de juiste keuze. Zit de fout in een validatieregel of een regel Apex, dan is een hotfix via de normale pipeline sneller en veiliger dan een pakket van 200 componenten terugdraaien. Draai terug als de impact onbekend is. Repareer vooruit als die klein en begrepen is.
Een rollback is een ontwerpbeslissing die je bij het bouwen neemt. Beantwoord deze vijf voordat de release uitgaat.
Valideren voor je deployt is de goedkoopste preventie die er is. Een validatie met tests blijft 10 dagen bruikbaar en laat je hetzelfde pakket quick deployen zonder de Apex-tests opnieuw te draaien, dus compileerfouten horen niet in productie ontdekt te worden. Meer releaseplaybooks staan in onze SF Guides-bibliotheek.
Draait Salesforce een mislukte deployment automatisch terug?
Ja, maar alleen deployments die falen. Productiedeployments vereisen
rollbackOnError op true, dus een falend component gooit het hele pakket
weg. Een geslaagde deployment wordt nooit voor je teruggedraaid.
Kun je change sets terugdraaien?
Niet standaard. Er is geen omkeerknop, dus teams bouwen een tweede change set die de vorige versie opnieuw deployt, en dat werkt alleen als iemand die versie eerst heeft vastgelegd.
Herstelt een metadata-rollback mijn data?
Nee. Metadata en data zijn losse problemen. Configuratie terugdraaien maakt records die een automatisering aanmaakte, wijzigde of verwijderde niet ongedaan, daarvoor heb je backup en een herstelplan nodig.
Hoelang kan ik een verwijderd custom field herstellen?
15 dagen. Het veld staat in Deleted Fields in Object Manager en is binnen dat venster met data terug te halen, al moet je het soms handmatig terugzetten op page layouts.
Vrijblijvend.