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
|
<!DOCTYPE html>
<html>
<head>
<title>
The Codex »
Notes towards automating deployment
</title>
<link
rel='stylesheet'
type='text/css'
href='http://fonts.googleapis.com/css?family=Buenard:400,700&subset=latin,latin-ext'>
<link
rel="stylesheet"
type="text/css"
href="../media/css/reset.css">
<link
rel="stylesheet"
type="text/css"
href="../media/css/grimoire.css">
</head>
<body>
<div id="shell">
<ol id="breadcrumbs">
<li class="crumb-0 not-last">
<a href="../">index</a>
</li>
<li class="crumb-1 not-last">
<a href="./">devops</a>
</li>
<li class="crumb-2 last">
autodeploy
</li>
</ol>
<div id="article">
<h1 id="notes-towards-automating-deployment">Notes towards automating deployment</h1>
<p>This is mostly aimed at the hosted-apps folks; deploying packaged software for
end users requires a slightly different approach.</p>
<h2 id="assumptions">Assumptions</h2>
<ol>
<li>
<p>You have one or more <em>services</em> to deploy. (If not, what are you doing
here?)</p>
</li>
<li>
<p>Your services are tracked in <em>source control</em>. (If not, go sort that out,
then come back. No, seriously, <em>now</em>.)</p>
</li>
<li>
<p>You will be deploying your services to one or more <em>environments</em>. An
environment is an abstract thing: think “production,” not
“web01.public.example.com.” (If not, where, exactly, will your service run?)</p>
</li>
<li>
<p>For each service, in each environment, there are one or more <em>servers</em> to
host the service. These servers are functionally identical. (If not, go pave
them and rebuild them using Puppet, Chef, CFengine, or, hell, shell scripts
and duct tape. An environment full of one-offs is the kind of hell I wouldn't
wish on my worst enemy.)</p>
</li>
<li>
<p>For each service, in each environment, there is a canonical series of steps
that produce a “deployed” system.</p>
</li>
</ol>
<hr>
<ol>
<li>Decide what code should be deployed. (This is a version control activity.)</li>
<li>Get the code onto the fucking server.</li>
<li>Decide what configuration values should be deployed. (This is also a
version control activity, though possibly not in the same repositories as
the code.)</li>
<li>Get the configuration onto the fucking server.</li>
<li>Get the code running with the configuration.</li>
<li>Log to fucking syslog.</li>
<li>When the machine reboots, make sure the code comes back running the same
configuration.</li>
</ol>
</div>
<div id="comments">
<div id="disqus_thread"></div>
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
var disqus_shortname = 'grimoire'; // required: replace example with your forum shortname
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
<a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
</div>
<div id="footer">
<p>
The Codex —
Powered by <a href="http://markdoc.org/">Markdoc</a>.
<a href="https://bitbucket.org/ojacobson/grimoire.ca/src/master/wiki/devops/autodeploy.md">See this page on Bitbucket</a> (<a href="https://bitbucket.org/ojacobson/grimoire.ca/history-node/master/wiki/devops/autodeploy.md">history</a>).
</p>
</div>
</div>
</body>
</html>
|