This repository was archived by the owner on Mar 5, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy patharticle-golive.html
More file actions
278 lines (257 loc) · 13.9 KB
/
article-golive.html
File metadata and controls
278 lines (257 loc) · 13.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Salesforce Discord Community</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<!-- Le styles -->
<link href="assets/css/bootstrap.css" rel="stylesheet">
<link href="assets/css/bootstrap-responsive.css" rel="stylesheet">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.0.12/css/all.css" integrity="sha384-G0fIWCsCzJIMAVNQPfjH08cyYaUtMwjJwqiRKxxE/rx96Uroj1BtIQ6MLJuheaO9" crossorigin="anonymous">
<link href="assets/css/style.css" rel="stylesheet">
<link href='http://fonts.googleapis.com/css?family=Raleway:400,500,600,700,800' rel='stylesheet' type='text/css'>
<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="assets/js/html5shiv.js"></script>
<![endif]-->
<!-- Fav and touch icons -->
<link rel="apple-touch-icon" sizes="180x180" href="/assets/ico/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/ico/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/ico/favicon-16x16.png">
<link rel="manifest" href="/assets/ico/site.webmanifest">
<link rel="mask-icon" href="/assets/ico/safari-pinned-tab.svg" color="#5bbad5">
<link rel="shortcut icon" href="/assets/ico/favicon.ico">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-config" content="/assets/ico/browserconfig.xml">
<meta name="theme-color" content="#ffffff">
</head>
<body>
<!-- NAVBAR
================================================== -->
<div class="banner navbar navbar-static-top navbar-inverse">
<div class="navbar-inner">
<div class="container">
<a class="brand" href="index.html"><img src="assets/img/logo.png" width=70px></a>
<!-- Responsive Navbar -->
<div id="nav-main">
<ul id="menu" class="nav">
<li><a href="index.html">Home</a></li>
<li class="active"><a href="wiki-index.html">Knowledge Base</a></li>
<li><a href="faq.html">Faq</a></li>
<!-- Read about Bootstrap dropdowns at http://twitter.github.com/bootstrap/javascript.html#dropdowns -->
</ul>
</div><!--/.nav-collapse -->
</div> <!-- /.container -->
</div><!-- /.navbar-inner -->
</div><!-- /.navbar -->
<!-- PAGE HEADER -->
<div id="page-header-container">
<div class="container">
<div class="page-header row">
<div class="span8">
<h1>The SFXD wiki</h1>
<p class="tagline">Literally one page</p>
</div>
</div>
</div>
</div>
<!-- PAGE CONTENT -->
<div id="wrap" class="container" role="document">
<div id="content" class="row">
<div id="main" class="single-post span12" role="main">
<article class="post type-post">
<header>
<h1 class="entry-title">So you're going to prod</h1>
<div class="post-meta">
<time class="updated" pubdate>Last Updated: Aug 2, 2018</time>
</div>
</header>
<div class="page-main">
<hr />
<pre><code> *Windtastic Productions* PRESENT
~~
"SO YOU'RE GOING TO PROD"
</code></pre>
<p>You’re going to prod. This is the culmination of months of work. You’re happy, the client is expectant.<br>
You’re going to deploy this to a live instance for all the users.</p>
<p><strong>THAT’S GREAT.</strong></p>
<p>Now let’s make sure we don’t nuke everything.</p>
<p>Salesforce Change Sets and metadata deploy are non-reversible. What is done is done forever, and Salesforce has no backup. This is why we’re writing this today. You can’t just deploy Metadata for some users - it’s for everybody.</p>
<p><strong>SHIT YOU DO BEFORE YOU DO ANYTHING ELSE</strong></p>
<ul>
<li>
<p>Login to Prod. Is there already a config and data, even if it’s simple enough to be an amoeba sliding out from the ocean ?</p>
<ul>
<li>Nope<br>
Wow, a Greenfield implementation! Nice. Skip this section.</li>
<li>Yup.<br>
You’re touching a system these people use to store live data and use processes.<br>
Are you deploying stuff that changes existing objects, permissions or processes ?
<ul>
<li>Nope<br>
You’re not completely out of the woods but you can skip “Regression testing” from this guide</li>
<li>Yup.<br>
So you have a major deployment that can, but is not limited to:<br>
- break existing workflows<br>
- delete existing data<br>
- impact all users.<br>
Great, welcome to our guide. You can’t skip anything, so go through everything. Congrats!</li>
</ul>
</li>
</ul>
</li>
<li>
<p>Get a full UTF-8 data export.</p>
<ul>
<li>You can do this by going to Setup > Data Export and exporting EVERYTHING. This will take hours.</li>
<li>MAKE SURE YOU CHANGE THE ENCODING. Salesforce has some dumb rule of not defaulting to UTF-8. YOU NEED UTF-8. This is Europe, not Texas. Accents and ḍîáꞓȑîȶîꞓs exist.<br>
You can also do this by using Jitterbit to Query all the relevant tables, if you so prefer. Jitterbit is like Dataloader but better. If you don’t have it installed, install it now. IT IS FREE. It is great. If you tried doing a full data migration with Dataloader, you will not be helped. <a href="https://www.jitterbit.com/solutions/salesforce-integration/salesforce-data-loader/">https://www.jitterbit.com/solutions/salesforce-integration/salesforce-data-loader/</a></li>
</ul>
</li>
<li>
<p>Get a full metadata backup.</p>
<ul>
<li>First, go to prod and create a new Sandbox. Call it Backup010818 if it’s the first of August 2018. This will be your backup in case you fucked something up.</li>
<li>If you have the technical capacity for it, download an IDE with a Salesforce plugin (IntelliJ community edition is free, and the plugin Jetforcer is free for 90 days, for example). Download the entire metadata. Yes, everything. Now that you’ve done that, use Git to start a new repo and commit everything. You can Use Gitkraken (<a href="https://www.gitkraken.com/">https://www.gitkraken.com/</a>) for that if you’re new to git and just need to store it. Git will allow you to “save” changes but also revert anything you do. Great for panic rollbacks.</li>
</ul>
</li>
<li>
<p>Make Sure that your Change Sets contain everything, and that you have logged any pre- or post-install steps on the Change Set description. If you’re deploying Service Cloud, this means your Change Set description contains:<br>
"Before deploy, activate Person Accounts<br>
Run tests ContactTest, AccountTest, Object__cTest when deploying<br>
After deploy, activate Process Builders PB1, PB3, PB24<br>
After deploy, send out test email to <a href="mailto:[email protected]">[email protected]</a> to validate routing. "</p>
</li>
<li>
<p>If you’re deploying to a “mature” org that has existing processes</p>
<ul>
<li>You have gained the right to do a fake deployment before. They are mature, so they already use a Partial sandbox.<br>
First, make sure it’s refreshed recently, or that they can refresh it. DO NOT DO THAT YOURSELF. Ask them if you can.</li>
<li>You deploy stuff from your DEV sandbox to the new partial one. Once it’s deployed, uyou test everything with the client’s help ( alot of testing is on their side ).<br>
ANY MODIFICATION IS DONE IN YOUR DEV SANDBOX AND THEN DEPLOYED TO UAT.<br>
This allows you to have a final Change Set from prod.<br>
The client MUST approve that everything is fine after deployment to UAT, including tests from their side to ensure there are no regressions.</li>
</ul>
</li>
<li>
<p>If there’s Batch Apex involved ALWAYS TEST SHIT IN PARTIAL.</p>
</li>
</ul>
<p>Do you have backups of absolutely fucking everything? Yes? GREAT.</p>
<p><strong>GETTING READY TO DEPLOY</strong></p>
<p>You’ve got backups of absolutely fucking everything.<br>
Your Change Sets have been built and you have them uploaded.</p>
<p>First thing you do is validate them to make sure validations pass.<br>
Tests don’t work ? Stuff is missing ? Back to dev sandbox to fix it.</p>
<p>Second thing you do is estimate how long all pre- and post-install steps will take.<br>
IF you’re on a mature org or are impacting existing processes, this is the time window in which you will freeze all users to ensure data consistency. You will need to warn the client about this. This time needs to be short.</p>
<p>Being ready to deploy means that you can confidently deploy all Change Sets and do any post-install steps required as fast as possible. Meaning shit is Validated and ready to go. Note that in some cases you can’t validate Change Sets because features are missing. If go live timeframe is important, DEPLOY TO PARTIAL FIRST to give yourself a sense of how long this takes and check your Change Sets.</p>
<p>If any pre-install steps do not impact users, warn the client and carry them out now. (e.g. New feature activation that requires support involvement but is invisible to users before setup).</p>
<p><strong>DEPLOY</strong></p>
<p>You have a set hour and date on which to deploy.<br>
The client is warned and ready.<br>
Change Sets are ALREADY validated.</p>
<ul>
<li>Set Deliverability to “None”. You ain’t sending emails without testing.</li>
<li>You freeze all necessary users.</li>
<li>If you have that, activate the validation rule bypass on the admin user. No use fighting against that.</li>
<li>You carry out all pre-install steps that you could not do before.</li>
<li>You Deploy all Change Sets</li>
<li>You carry out all post-install steps.<br>
All of this is written on your Change Set description, so you have no surprises (hopefully).</li>
<li>If workflows or process builders are preventing deployment, and you deactivate them, NOTE ALL OF THEM DOWN SOMEWHERE.</li>
<li>Fix any bugs that pop up due to the client not keeping their prod in sync with their sandboxes.</li>
</ul>
<p><strong>POST-DEPLOY</strong></p>
<ul>
<li>Make sure everything looks fine, that you carried everything over.</li>
<li>Deactivate the validation rule bypass.</li>
<li>Go over each page, create a record and immediately delete it, etc.</li>
<li>Warn their PM that deployement is done and request testing from their side.</li>
<li>If you deactivated Workflows or PBs or somthing so the deployment passes, ACTIVATE THEM BACK AGAIN.</li>
</ul>
<p>IF You deployed a BATCH APEX:</p>
<ul>
<li>DO NOT SCHEDULE THAT THING.</li>
<li>Test it with a query that only affects some records.</li>
<li>Make sure everything is still fine.</li>
<li>Then schedule it.</li>
</ul>
<p><strong>REGRESSION TESTING</strong><br>
You deployed to a live org.<br>
With their PM and staff helping you, carry out day to day tasks from their users on selected records. Make sure there are no adverse effects that were not identified in sandbox.<br>
Set Email deliverability back to “full”. Test emails with their staff. CAREFULLY.</p>
<p>Stay on alert for the next few days if critical stuff happens.</p>
<p><strong>REACTIVATION</strong><br>
Notify PM all is well<br>
Unfreeze users<br>
go drink champagne.</p>
<p><strong>REVERTING CHANGES</strong></p>
<ul>
<li>
<p>Data is affected<br>
You have a backup. Don’t panic.<br>
Identify WTF is causing data to be wrong.<br>
Fix that.<br>
Get your backup, restore data to where it was before the fuckup.</p>
</li>
<li>
<p>Metadata is affected<br>
You have a backup. Don’t panic.<br>
Identify what was changed that shouldn’t be (probably page layouts, clients never keep those up to date)<br>
Revert from your backup sandbox<br>
Add any missing elements from your deployment.</p>
</li>
</ul>
</article>
</div>
</div><!-- /#content -->
</div><!-- /#wrap -->
<!-- FOOTER -->
<footer>
<div class="main-footer">
</div>
<!-- Sub footer -->
<div class="sub-footer">
<div class="container">
<div id="social-icons">
<ul>
<li class="social-icon discord">
<a class="fade-img" href="http://discord.gg" target="_blank" rel="tooltip" title="Discord">
<img src="assets/img/social/icons_discord.png" alt="Discord" />
</a>
</li>
<li class="social-icon salesforce">
<a class="fade-img" href="http://www.salesforce.com" target="_blank" rel="tooltip" title="Salesforce">
<img src="assets/img/social/icons_salesforce.png" alt="Salesforce" />
</a>
</li>
</ul>
</div>
<div class="copyright-text">Copyright 2018. Powered by <a href='http://github.io/'>GitHub</a>
</div>
</div>
</div>
</footer>
<!-- Javascript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="assets/js/jquery.js"></script>
<script src="assets/js/bootstrap-transition.js"></script>
<script src="assets/js/bootstrap-alert.js"></script>
<script src="assets/js/bootstrap-modal.js"></script>
<script src="assets/js/bootstrap-dropdown.js"></script>
<script src="assets/js/bootstrap-tab.js"></script>
<script src="assets/js/bootstrap-tooltip.js"></script>
<script src="assets/js/bootstrap-popover.js"></script>
<script src="assets/js/bootstrap-button.js"></script>
<script src="assets/js/bootstrap-collapse.js"></script>
<script src="assets/js/bootstrap-carousel.js"></script>
<script type="text/javascript" src="assets/js/jquery.autocomplete.js"></script>
<script type="text/javascript" src="assets/js/jquery.fitvids.js"></script>
<script type="text/javascript" src="assets/js/application.js"></script>
<script src="assets/js/holder/holder.js"></script>
</body>
</html>