Foreword |
|
xiii | |
Preface |
|
xv | |
|
|
1 | (8) |
|
|
1 | (1) |
|
Continuous Integration Fundamentals |
|
|
1 | (2) |
|
Introducing Jenkins (nee Hudson) |
|
|
3 | (1) |
|
From Hudson to Jenkins---A Short History |
|
|
4 | (1) |
|
Should 1 Use Jenkins or Hudson? |
|
|
5 | (1) |
|
Introducing Continuous Integration into Your Organization |
|
|
6 | (2) |
|
|
6 | (1) |
|
|
6 | (1) |
|
Phase 3 Nightly Builds and Basic Automated Tests |
|
|
6 | (1) |
|
Phase 4 Enter the Metrics |
|
|
7 | (1) |
|
Phase 5 Getting More Serious About Testing |
|
|
7 | (1) |
|
Phase 6 Automated Acceptance Tests and More Automated Deployment |
|
|
7 | (1) |
|
Phase 7 Continuous Deployment |
|
|
7 | (1) |
|
|
8 | (1) |
|
2 Your First Steps with Jenkins |
|
|
9 | (32) |
|
|
9 | (1) |
|
Preparing Your Environment |
|
|
9 | (4) |
|
|
10 | (1) |
|
|
10 | (1) |
|
Setting Up a GitHub Account |
|
|
11 | (1) |
|
|
11 | (1) |
|
Forking the Sample Repository |
|
|
12 | (1) |
|
|
13 | (4) |
|
|
17 | (4) |
|
Configuring Your Maven Setup |
|
|
18 | (1) |
|
|
19 | (1) |
|
|
20 | (1) |
|
|
20 | (1) |
|
Your First Jenkins Build Job |
|
|
21 | (5) |
|
Your First Build Job in Action |
|
|
26 | (7) |
|
More Reporting---Displaying Javadocs |
|
|
33 | (1) |
|
Adding Code Coverage and Other Metrics |
|
|
34 | (6) |
|
|
40 | (1) |
|
|
41 | (24) |
|
|
41 | (1) |
|
Downloading and Installing Jenkins |
|
|
41 | (3) |
|
Preparing a Build Server for Jenkins |
|
|
44 | (2) |
|
The Jenkins Home Directory |
|
|
46 | (1) |
|
Installing Jenkins on Debian or Ubuntu |
|
|
47 | (1) |
|
Installing Jenkins on Redhat, Fedora, or CentOS |
|
|
48 | (1) |
|
Installing Jenkins on SUSE or OpenSUSE |
|
|
48 | (1) |
|
Running Jenkins as a Stand-Alone Application |
|
|
49 | (3) |
|
Running Jenkins Behind an Apache Server |
|
|
52 | (1) |
|
Running Jenkins on an Application Server |
|
|
53 | (1) |
|
|
54 | (1) |
|
Installing Jenkins as a Windows Service |
|
|
54 | (4) |
|
What's in the Jenkins Home Directory |
|
|
58 | (4) |
|
Backing Up Your Jenkins Data |
|
|
62 | (1) |
|
Upgrading Your Jenkins Installation |
|
|
62 | (1) |
|
|
63 | (2) |
|
4 Configuring Your Jenkins Server |
|
|
65 | (14) |
|
|
65 | (1) |
|
The Configuration Dashboard---The Manage Jenkins Screen |
|
|
65 | (3) |
|
Configuring the System Environment |
|
|
68 | (1) |
|
Configuring Global Properties |
|
|
69 | (1) |
|
|
70 | (2) |
|
Configuring Your Build Tools |
|
|
72 | (3) |
|
|
73 | (1) |
|
|
74 | (1) |
|
|
75 | (1) |
|
Configuring Your Version Control Tools |
|
|
75 | (1) |
|
|
76 | (1) |
|
|
76 | (1) |
|
Configuring the Mail Server |
|
|
76 | (1) |
|
|
77 | (1) |
|
|
78 | (1) |
|
5 Setting Up Your Build Jobs |
|
|
79 | (56) |
|
|
79 | (1) |
|
|
79 | (1) |
|
Creating a Freestyle Build Job |
|
|
80 | (4) |
|
|
81 | (1) |
|
|
82 | (2) |
|
Configuring Source Code Management |
|
|
84 | (13) |
|
|
84 | (3) |
|
|
87 | (10) |
|
|
97 | (5) |
|
Triggering a Build Job Once Another Build Job Has Finished |
|
|
98 | (1) |
|
|
98 | (1) |
|
|
99 | (1) |
|
Triggering Builds Remotely |
|
|
100 | (2) |
|
|
102 | (1) |
|
|
102 | (8) |
|
|
102 | (2) |
|
|
104 | (1) |
|
Executing a Shell or Windows Batch Command |
|
|
105 | (1) |
|
Using Jenkins Environment Variables in Your Builds |
|
|
106 | (2) |
|
|
108 | (2) |
|
Building Projects in Other Languages |
|
|
110 | (1) |
|
|
110 | (5) |
|
Reporting on Test Results |
|
|
110 | (1) |
|
|
111 | (3) |
|
|
114 | (1) |
|
|
115 | (1) |
|
Running Your New Build Job |
|
|
115 | (1) |
|
Working with Maven Build Jobs |
|
|
115 | (10) |
|
Building Whenever a SNAPSHOT Dependency Is Built |
|
|
116 | (1) |
|
Configuring the Maven Build |
|
|
117 | (2) |
|
|
119 | (1) |
|
Deploying to an Enterprise Repository Manager |
|
|
119 | (4) |
|
Deploying to Commercial Enterprise Repository Managers |
|
|
123 | (1) |
|
|
123 | (1) |
|
Extra Build Steps in Your Maven Build Jobs |
|
|
123 | (2) |
|
Using Jenkins with Other Languages |
|
|
125 | (8) |
|
Building Projects with Grails |
|
|
125 | (2) |
|
Building Projects with Gradle |
|
|
127 | (3) |
|
Building Projects with Visual Studio MSBuild |
|
|
130 | (1) |
|
Building Projects with NAnt |
|
|
131 | (1) |
|
Building Projects with Ruby and Ruby on Rails |
|
|
131 | (2) |
|
|
133 | (2) |
|
|
135 | (34) |
|
|
135 | (1) |
|
Automating Your Unit and Integration Tests |
|
|
136 | (1) |
|
Configuring Test Reports in Jenkins |
|
|
137 | (2) |
|
|
139 | (3) |
|
|
142 | (2) |
|
|
144 | (11) |
|
Measuring Code Coverage with Cobertura |
|
|
145 | (8) |
|
Measuring Code Coverage with Clover |
|
|
153 | (2) |
|
Automated Acceptance Tests |
|
|
155 | (3) |
|
Automated Performance Tests with JMeter |
|
|
158 | (8) |
|
Help! My Tests Are Too Slow! |
|
|
166 | (2) |
|
|
167 | (1) |
|
Run Fewer Integration/Functional Tests |
|
|
167 | (1) |
|
Run Your Tests in Parallel |
|
|
168 | (1) |
|
|
168 | (1) |
|
|
169 | (26) |
|
|
169 | (1) |
|
Activating Security in Jenkins |
|
|
169 | (1) |
|
Simple Security in Jenkins |
|
|
170 | (1) |
|
Security Realms---Identifying Jenkins Users |
|
|
171 | (10) |
|
Using Jenkins's Built-in User Database |
|
|
171 | (4) |
|
|
175 | (1) |
|
Using Microsoft Active Directory |
|
|
176 | (1) |
|
Using Unix Users and Groups |
|
|
177 | (1) |
|
Delegating to the Servlet Container |
|
|
177 | (1) |
|
|
178 | (1) |
|
Integrating with Other Systems |
|
|
178 | (3) |
|
Authorization---Who Can Do What |
|
|
181 | (8) |
|
|
181 | (4) |
|
|
185 | (3) |
|
|
188 | (1) |
|
Auditing---Keeping Track of User Actions |
|
|
189 | (4) |
|
|
193 | (2) |
|
|
195 | (30) |
|
|
195 | (1) |
|
|
195 | (2) |
|
More Advanced Email Notification |
|
|
197 | (3) |
|
|
200 | (1) |
|
|
201 | (1) |
|
|
202 | (1) |
|
|
203 | (6) |
|
IM Notification with Jabber |
|
|
204 | (4) |
|
IM Notification using IRC |
|
|
208 | (1) |
|
|
209 | (3) |
|
|
212 | (1) |
|
|
213 | (3) |
|
|
216 | (1) |
|
|
216 | (2) |
|
|
218 | (3) |
|
|
221 | (2) |
|
|
223 | (2) |
|
|
225 | (28) |
|
|
225 | (1) |
|
Code Quality in Your Build Process |
|
|
226 | (1) |
|
Popular Java and Groovy Code Quality Analysis Tools |
|
|
227 | (10) |
|
|
227 | (3) |
|
|
230 | (4) |
|
|
234 | (2) |
|
|
236 | (1) |
|
Reporting on Code Quality Issues with the Violations Plugin |
|
|
237 | (5) |
|
Working with Freestyle Build Jobs |
|
|
238 | (3) |
|
Working with Maven Build Jobs |
|
|
241 | (1) |
|
Using the Checkstyle, PMD, and FindBugs Reports |
|
|
242 | (3) |
|
Reporting on Code Complexity |
|
|
245 | (2) |
|
|
247 | (1) |
|
|
248 | (4) |
|
|
252 | (1) |
|
|
253 | (48) |
|
|
253 | (1) |
|
|
253 | (9) |
|
Creating a Parameterized Build Job |
|
|
254 | (1) |
|
Adapting Your Builds to Work with Parameterized Build Scripts |
|
|
254 | (3) |
|
More Advanced Parameter Types |
|
|
257 | (2) |
|
Building from a Subversion Tag |
|
|
259 | (1) |
|
|
260 | (1) |
|
Starting a Parameterized Build Job Remotely |
|
|
260 | (1) |
|
Parameterized Build Job History |
|
|
261 | (1) |
|
|
262 | (1) |
|
Multiconfiguration Build Jobs |
|
|
263 | (7) |
|
Setting Up a Multiconfiguration Build |
|
|
264 | (1) |
|
|
265 | (1) |
|
|
266 | (1) |
|
|
267 | (1) |
|
Running a Multiconfiguration Build |
|
|
267 | (3) |
|
Generating Your Maven Build Jobs Automatically |
|
|
270 | (7) |
|
|
271 | (1) |
|
Reusing Job Configuration with Inheritance |
|
|
272 | (2) |
|
|
274 | (3) |
|
|
277 | (1) |
|
|
277 | (4) |
|
Parallel Builds in Jenkins |
|
|
277 | (1) |
|
|
278 | (1) |
|
|
278 | (2) |
|
|
280 | (1) |
|
Build Pipelines and Promotions |
|
|
281 | (18) |
|
Managing Maven Releases with the M2Release Plugin |
|
|
282 | (3) |
|
|
285 | (3) |
|
|
288 | (7) |
|
|
295 | (1) |
|
|
296 | (3) |
|
|
299 | (2) |
|
|
301 | (22) |
|
|
301 | (1) |
|
The Jenkins Distributed Build Architecture |
|
|
301 | (1) |
|
Master/Slave Strategies in Jenkins |
|
|
302 | (10) |
|
The Master Starts the Slave Agent Using SSH |
|
|
303 | (4) |
|
Starting the Slave Agent Manually Using Java Web Start |
|
|
307 | (3) |
|
Installing a Jenkins Slave as a Windows Service |
|
|
310 | (1) |
|
Starting the Slave Node in Headless Mode |
|
|
311 | (1) |
|
Starting a Windows Slave as a Remote Service |
|
|
311 | (1) |
|
Associating a Build Job with a Slave or Group of Slaves |
|
|
312 | (2) |
|
|
314 | (1) |
|
|
314 | (5) |
|
|
315 | (4) |
|
Using the CloudBees DEV@cloud Service |
|
|
319 | (2) |
|
|
321 | (2) |
|
12 Automated Deployment and Continuous Delivery |
|
|
323 | (20) |
|
|
323 | (1) |
|
Implementing Automated and Continuous Deployment |
|
|
324 | (4) |
|
|
324 | (1) |
|
|
325 | (2) |
|
|
327 | (1) |
|
|
328 | (1) |
|
Deploying to an Application Server |
|
|
328 | (13) |
|
Deploying a Java Application |
|
|
329 | (10) |
|
Deploying Scripting-based Applications Like Ruby and PHP |
|
|
339 | (2) |
|
|
341 | (2) |
|
|
343 | (16) |
|
|
343 | (1) |
|
|
343 | (4) |
|
Using the Disk Usage Plugin |
|
|
345 | (1) |
|
Disk Usage and the Jenkins Maven Project Type |
|
|
346 | (1) |
|
Monitoring the Server Load |
|
|
347 | (1) |
|
Backing Up Your Configuration |
|
|
348 | (5) |
|
Fundamentals of Jenkins Backups |
|
|
349 | (2) |
|
|
351 | (1) |
|
More Lightweight Automated Backups |
|
|
352 | (1) |
|
|
353 | (1) |
|
|
354 | (4) |
|
|
358 | (1) |
Appendix: Automating Your Unit and Integration Tests |
|
359 | (10) |
Index |
|
369 | |