-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
298 lines (259 loc) · 8.8 KB
/
index.html
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
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Team Foundation Server Builds</title>
<meta name="description" content="A short presentation about Team Foundation Server builds.">
<meta name="author" content="Paul Zerkel">
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="reveal/css/reveal.min.css">
<link rel="stylesheet" href="reveal/css/theme/default.css" id="theme">
<!-- For syntax highlighting -->
<link rel="stylesheet" href="reveal/lib/css/zenburn.css">
<!-- If the query includes 'print-pdf', use the PDF print sheet -->
<script>
document.write( '<link rel="stylesheet" href="reveal/css/print/' + ( window.location.search.match( /print-pdf/gi ) ? 'pdf' : 'paper' ) + '.css" type="text/css" media="print">' );
</script>
<!--[if lt IE 9]>
<script src="lib/js/html5shiv.js"></script>
<![endif]-->
</head>
<body>
<div class="reveal">
<!-- Any section element inside of this container is displayed as a slide -->
<div class="slides">
<section>
<h1>Team Foundation Server Builds</h1>
<h3>Paul Zerkel</h3>
<p>
<small>11/21/2013</small>
</p>
</section>
<section>
<h2>Topics of Discussion</h2>
<ul>
<li>Overview / What is a build server?</li>
<li>How TFS acts as a build server</li>
<li>How to create a build</li>
<li>Automating Tasks</li>
</ul>
</section>
<section>
<h2>Team Foundation Server</h2>
<p>
Microsoft’s Application Lifecycle Management solution
</p>
<ul>
<li>Task Tracking</li>
<li>Source Control</li>
<li>Bug Tracking</li>
<li>Build Server</li>
<li>Deployments</li>
<li>Lab Management</li>
<li>etc</li>
</ul>
</section>
<section>
<h2>What is a Build Server?</h2>
<ul>
<li>A service often running on a dedicated machine</li>
<li>Handles running build scripts based on an event</li>
<li>Often keeps track of build artifacts, retrieves dependencies, logs results, keeps statistics</li>
</ul>
<br>
<br>
<blockquote cite="http://www.codinghorror.com/blog/2006/10/the-build-server-your-projects-heart-monitor.html">
the heart monitor of your project -Jeff Atwood
</blockquote>
</section>
<section>
<h2>Examples</h2>
<ul>
<li>Team Foundation Server</li>
<li>Jenkins</li>
<li>Hudson</li>
<li>Team City</li>
<li>CruiseControl.net</li>
</ul>
</section>
<section>
<h2>Pros</h2>
<ul>
<li>Centralized</li>
<li>Repeatable</li>
<li>Code Health Monitoring</li>
<li>Continuous Integration</li>
</ul>
</section>
<section>
<h2>Cons</h2>
<ul>
<li>Requires time to set up early on in the project.</li>
<li>Another piece of infrastructure to maintain.</li>
<li>Once you get used to automated builds, doing it by hand is a real pain.</li>
</ul>
</section>
<section>
<h2>Builds in TFS</h2>
<p>
Used for automated builds for code stored within Team Foundation System. Components include:
</p>
<ul>
<li>Team Foundation Server</li>
<li>Build Server</li>
<li>Build Controller</li>
<li>Build Agent</li>
</ul>
</section>
<section>
<h2>Small Team Infrastructure</h2>
<a class="image" href="http://msdn.microsoft.com/en-us/library/dd793166.aspx" target="_blank">
<img alt="Small Team Infrastructure Diagram" src="./img/smallteam.png">
</a>
<br>
<small>source: <a href="http://msdn.microsoft.com/en-us/library/dd793166.aspx">MSDN</a></small>
</section>
<section>
<h2>Large Team Infrastructure</h2>
<a class="image" href="http://msdn.microsoft.com/en-us/library/dd793166.aspx" target="_blank">
<img alt="Large Team Infrastructure Diagram" src="./img/largeteam.png">
</a>
<br>
<small>source: <a href="http://msdn.microsoft.com/en-us/library/dd793166.aspx">MSDN</a></small>
</section>
<section>
<h2>Visual Studio Online Infrastructure</h2>
<a class="image" href="http://msdn.microsoft.com/en-us/library/dd793166.aspx" target="_blank">
<img alt="Visual Studio Online Infrastructure Diagram" src="./img/dacloud.png">
</a>
<br>
<small>source: <a href="http://msdn.microsoft.com/en-us/library/dd793166.aspx">MSDN</a></small>
</section>
<section>
<h2>Build Process Template</h2>
<ul>
<li>TFS 2010 moved from a MSBuild based build process to a Windows Workflow based build process</li>
<li>The workflows are called Build Process Templates</li>
<li>Edit them like a normal workflow</li>
<li>Workflows have arguments that can be customized through the build UI as part of the build definition</li>
</ul>
</section>
<section>
<h2>Build Definition</h2>
<p>
A specific instance of a build which requires:
</p>
<ul>
<li>Name</li>
<li>Status</li>
<li>Trigger</li>
<li>Source Settings</li>
<li>Build Defaults</li>
<li>Process</li>
<li>Retention Policy</li>
</ul>
</section>
<section>
<h2>Built in Features</h2>
<ul>
<li>Unit Testing</li>
<li>Code Analysis</li>
<li>Deployments</li>
<li>Labeling</li>
</ul>
</section>
<section>
<h2>Add-on TFS Activities</h2>
<p>
Assemblies must be checked into source control and the build controller must point to the custom assembly directory.
</p>
<ul>
<li>Build your own</li>
<li>Open Source (TFS Extensions)</li>
</ul>
</section>
<section>
<h2>Versioning</h2>
<ul>
<li>Need to download and customize the workflow</li>
<li>Can set how the version number is constructed</li>
<li>Lots of customization available</li>
</ul>
</section>
<section>
<h2>StyleCop</h2>
<p>
TFS Extensions has a StyleCop activity that will run stylecop on the source files and report back as part of the build process.
</p>
<ul>
<li>Helps enforce consistent code style throughout the project</li>
<li>Can be customized per project</li>
<li>Violations can be set as errors</li>
</ul>
</section>
<section>
<h2>Example Project Organization</h2>
<p>
The organization of your project within TFS is imporant. The root of a project should be broken up into areas that target different stages
of the software lifecycle.
</p>
<ul>
<li>Development</li>
<li>Main</li>
<li>Release</li>
</ul>
</section>
<section>
<h2>Continuous Integration Example</h2>
<p>
A continuous integration build will run any time code is checked in. This gives you quick feedback on the state of the codebase.
</p>
<ul>
<li>Set up email alerts for builds</li>
<li>Create a build definition for the branch you're working in</li>
<li>Pick Continuous Integration or Rolling Builds for the trigger</li>
<li>Run unit tests, code analysis, and style checker</li>
<li>Don't copy the output to the drop folder</li>
<li>Turn off labeling</li>
</ul>
</section>
<section>
<h2>Release Example</h2>
<p>
A release build will target a branch in the Release folder. Release builds are intended to be deployed to environments outside of
the developer's machines such as Development, QA, and Production.
</p>
<ul>
<li>Create a build definition for the release branch in question</li>
<li>Each build should use a TFS Version task with the Major and Minor values set</li>
<li>Set the build targets appropriately</li>
<li>Make sure the project has configuration transforms as needed</li>
<li>Label the build</li>
<li>Select a reasonable spot on the network to store build results</li>
<li>Unit testing, code analysis, and style checking is optional</li>
</ul>
</section>
<section>
<h2>Questions?</h2>
<h3 class="fragment roll-in">Thanks!</h3>
</section>
</div>
</div>
<script src="reveal/lib/js/head.min.js"></script>
<script src="reveal/js/reveal.min.js"></script>
<script>
// Full list of configuration options available here:
// https://github.com/hakimel/reveal.js#configuration
Reveal.initialize({
controls: true,
progress: true,
history: true,
center: true,
theme: Reveal.getQueryHash().theme, // available themes are in /css/theme
transition: Reveal.getQueryHash().transition || 'default', // default/cube/page/concave/zoom/linear/fade/none
});
</script>
</body>
</html>