Preface

Audience

This book is aimed at relatively technical readers, though no prior experience with Continuous Integration is assumed. You may be new to Continuous Integration, and would like to learn about the benefits it can bring to your development team. Or, you might be using Jenkins or Hudson already, and want to discover how you can take your Continuous Integration infrastructure further.

Much of this book discusses Jenkins in the context of Java or JVM-related projects. Nevertheless, even if you are using another technology stack, this book should give you a good grounding in Continuous Integration with Jenkins. We discuss how to build projects using several non-Java technologies, including Grails, Ruby on Rails and .NET. In addition, many topics, such as general configuration, notification, distributed builds and security are applicable no matter what language you are using.

Book Layout

Continuous Integration is like a lot of things: the more you put in, the more value you will get out. While even a basic Continuous Integration setup will produce positive improvements in your team process, there are significant advantages to gradually assimilating and implementing some of the more advanced techniques as well. To this end, this book is organized as a progressive trek into the world of Continuous Integration with Jenkins, going from simple to more advanced. In the first chapter, we start off with a sweeping overview of what Jenkins is all about, in the form of a high-level guided tour. From there, we progress into how to install and configure your Jenkins server and how to set up basic build jobs. Once we have mastered the basics, we will delve into more advanced topics, including automated testing practices, security, more advanced notification techniques, and measuring and reporting on code quality metrics. Next, we move on to more advanced build techniques such as matrix builds, distributed builds and cloud-based CI, before discussing how to implement Continuous Deployment with Jenkins. Finally, we cover some tips on maintaining your Jenkins server.

Jenkins or Hudson?

As we discuss in the introduction, Jenkins was originally, and up until recently, known as Hudson. In 2009, Oracle purchased Sun and inherited the code base of Hudson. In early 2011, tensions between Oracle and the open source community reached rupture point and the project forked into two separate entities: Jenkins, run by most of the original Hudson developers, and Hudson, which remained under the control of Oracle.

As the title suggests, this book is primarily focused on Jenkins. However, much of the book was initially written before the fork, and the products remain very similar. So, although the examples and illustrations do usually refer to Jenkins, almost all of what is discussed will also apply to Hudson.

Font Conventions

This book follows certain conventions for font usage. Understanding these conventions up-front makes it easier to use this book.

Italic

Used for filenames, file extensions, URLs, application names, emphasis, and new terms when they are first introduced.

Constant width

Used for Java class names, methods, variables, properties, data types, database elements, and snippets of code that appear in text.

Constant width bold

Used for commands you enter at the command line and to highlight new code inserted in a running example.

Constant width italic

Used to annotate output.

Command-Line Conventions

From time to time, this book discusses command-line instructions. When we do, output produced by the console (e.g., command prompts or screen output) is displayed in normal characters, and commands (what you type) are written in bold. For example:

$ ls -al
total 168
drwxr-xr-x   16 johnsmart  staff    544 21 Jan 07:20 .
drwxr-xr-x+  85 johnsmart  staff   2890 21 Jan 07:10 ..
-rw-r--r--    1 johnsmart  staff     30 26 May  2009 .owner
-rw-r--r--@   1 johnsmart  staff   1813 16 Apr  2009 config.xml
drwxr-xr-x  181 johnsmart  staff   6154 26 May  2009 fingerprints
drwxr-xr-x   17 johnsmart  staff    578 16 Apr  2009 jobs
drwxr-xr-x    3 johnsmart  staff    102 15 Apr  2009 log
drwxr-xr-x   63 johnsmart  staff   2142 26 May  2009 plugins
-rw-r--r--    1 johnsmart  staff     46 26 May  2009 queue.xml
-rw-r--r--@   1 johnsmart  staff     64 13 Nov  2008 secret.key
-rw-r--r--    1 johnsmart  staff  51568 26 May  2009 update-center.json
drwxr-xr-x    3 johnsmart  staff    102 26 May  2009 updates
drwxr-xr-x    3 johnsmart  staff    102 15 Apr  2009 userContent
drwxr-xr-x   12 johnsmart  staff    408 17 Feb  2009 users
drwxr-xr-x   28 johnsmart  staff    952 26 May  2009 war

Where necessary, the backslash character at the end of the line is used to indicate a line break: you can type this all on one line (without the backslash) if you prefer. Don’t forget to ignore the “>” character at the start of the subsequent lines—it’s a Unix prompt character:

$ wget -O - http://jenkins-ci.org/debian/jenkins-ci.org.key \
> | sudo apt-key add -

For consistency, unless we are discussing a Windows-specific issue, we will use Unix-style command prompts (the dollar sign, “$”), as shown here:

$ java -jar jenkins.war

or:

$ svn list svn://localhost

However, unless we say otherwise, Windows users can safely use these commands from the Windows command console:

C:\Documents and Settings\Owner> java -jar jenkins.war

or:

C:\Documents and Settings\Owner> svn list svn://localhost

Contributors

This book was not written alone. Rather, it has been a collaborative effort involving many people playing different roles. In particular, the following people generously contributed their time, knowledge and writing skill to make this a better book:

  • Evgeny Goldin is a Russian-born software engineer living in Israel. He is a lead developer at Thomson Reuters where he’s responsible for a number of activities, some of which are directly related to Maven, Groovy, and build tools such as Artifactory and Jenkins. He has a vast experience in a range of technologies, including Perl, Java, JavaScript and Groovy. Build tools and dynamic languages are Evgeny’s favorite subjects about which he often writes, presents or blogs. These days he is writing for GroovyMag, Methods & Tools and runs two open source projects of his own: Maven-plugins and GCommons. He blogs at http://evgeny-goldin.com/blog and can be found on Twitter as @evgeny_goldin.

    Evgeny contributed a section on generating your Maven build jobs automatically in Chapter 10.

  • Matthew McCullough is an energetic 15 year veteran of enterprise software development, open source education, and co-founder of Ambient Ideas, LLC, a Denver consultancy. Matthew currently is a trainer for GitHub.com, author of the Git Master Class series for O’Reilly, speaker at over 30 national and international conferences, author of 3 of the top 10 DZone RefCards, and President of the Denver Open Source Users Group. His current topics of research center around project automation: build tools (Maven, Leiningen, Gradle), distributed version control (Git), Continuous Integration (Jenkins) and Quality Metrics (Sonar). Matthew resides in Denver, Colorado with his beautiful wife and two young daughters, who are active in nearly every outdoor activity Colorado has to offer.

    Matthew wrote the section on integrating Git with Jenkins in Chapter 5.

  • Juven Xu is a software engineer from China who works for Sonatype. An active member of the open source community and recognized Maven expert, Juven was responsible for the Chinese translation of Maven: The Definitive Guide as well as an original Chinese reference book on Maven. He is also currently working on the Chinese translation of the present book.

    Juven wrote the section on IRC notifications in Chapter 8.

  • Rene Groeschke is a software engineer at Cassidian Systems, formerly known as EADS Deutschland GmbH, as well as an open source enthusiast. A certified ScrumMaster with about 7 years experience as a programmer in several enterprise Java projects, he is especially focused on Agile methodologies like Continuous Integration and Test-Driven Development. Besides his daily business, the University of Corporate Education in Friedrichshafen allows him to spread the word about scrum and scrum related topics by giving lectures for the bachelor students of information technology.

    Rene contributed the section on building projects with Gradle in Chapter 5.

The Review Team

The technical review process for this book was a little different to the approach taken for most books. Rather than having one or two technical reviewers read the entire book near the end of the book writing process, a team of volunteers from the Jenkins community, including many key Jenkins developers, were able to read chapters as they were written. This review team was made up of the following people: Alan Harder, Andrew Bayer, Carlo Bonamico, Chris Graham, Eric Smalling, Gregory Boissinot, Harald Soevik, Julien Simpson, Juven Xu, Kohsuke Kawaguchi, Martijn Verberg, Ross Rowe, and Tyler Ballance.

Book Sponsors

This book would not have been possible without the help of several organizations who were willing to assist with and fund the book-writing process.

Wakaleo Consulting

Wakaleo Consulting is a consulting company that helps organizations optimize their software development process. Lead by John Ferguson Smart, author of this book and Java Power Tools, Wakaleo Consulting provides consulting, training and mentoring services in Agile Java Development and Testing Practices, Software Development Life Cycle optimization, and Agile Methodologies.

Wakaleo helps companies with training and assistance in areas such as Continuous Integration, Build Automation, Test-Driven Development, Automated Web Testing and Clean Code, using open source tools such as Maven, Jenkins, Selenium 2, and Nexus. Wakaleo Consulting also runs public and on-site training around Continuous Integration and Continuous Deployment, Build Automation, Clean Code practices, Test-Driven Development and Behavior-Driven Development, including Certified Scrum Developer (CSD) courses.

CloudBees

CloudBees is the only cloud company focused on servicing the complete develop-to-deploy life cycle of Java web applications in the cloud. The company is also the world’s premier expert on the Jenkins/Hudson continuous integration tool.

Jenkins/Hudson creator Kohsuke Kawaguchi leads a CloudBees team of experts from around the world. They’ve created Nectar, a supported and enhanced version of Jenkins that is available on-premise by subscription. If you depend on Jenkins for mission-critical software processes, Nectar provides a highly-tested, stable, and fully-supported version of Jenkins. It also includes Nectar-only functionality such as automatic scaling to VMware virtual machines.

If you’re ready to explore the power of continuous integration in the cloud, CloudBees makes Jenkins/Hudson available as part of its DEV@cloud build platform. You can get started with Jenkins instantly and can scale as needed—no big up-front investment in build servers, no more limited capacity for builds, and no maintenance hassles. Once an application is ready to go live, you can deploy on CloudBees’s RUN@cloud Platform as a Service in just a few clicks.

With CloudBees’s DEV@cloud and RUN@cloud services, you don’t have to worry about servers, virtual machines or IT staff. And with Nectar, you enjoy the most powerful, stable, supported Jenkins available.

Odd-e

Odd-e is an Asian-based company that builds products in innovative ways and helps others achieve the same. The team consists of experienced coaches and product developers who work according to the values of scrum, agile, lean, and craftsmanship, and the company is structured the same way. For example, Odd-e doesn’t have an organizational hierarchy or managers making decisions for others. Instead, individuals self-organize and use all their skills to continuously improve their competence. The company provides training and follow-up coaching to help others collaboratively seek and develop a better way of working.

It is not the job but the values that binds Odd-e together. Its members love building software, value learning and contribution over maximizing profit, and are committed to supporting open source development in Asia.

Using Code Examples

This book is an open source book, published under the Creative Commons License. The book was written in DocBook, using XmlMind. The book’s source code can be found on GitHub at http://www.github.org/wakaleo/jenkins-the-definitive-guide.

The sample Jenkins projects used in this book are open source and freely available online—see the book’s web page at http://www.wakaleo.com/books/jenkins-the-definitive-guide for more details.

This book is here to help you get your job done. In general, you may use the code in this book in your programs and documentation. You do not need to contact us for permission unless you’re reproducing a significant portion of the code. For example, writing a program that uses several chunks of code from this book does not require permission. Selling or distributing a CD-ROM of examples from O’Reilly books does require permission. Answering a question by citing this book and quoting example code does not require permission. Incorporating a significant amount of example code from this book into your product’s documentation does require permission.

We appreciate, but do not require, attribution. An attribution usually includes the title, author, publisher, and ISBN. For example: “Jenkins: The Definitive Guide by John Ferguson Smart (O’Reilly). Copyright 2011 John Ferguson Smart, 978-1-449-30535-2.”

If you feel your use of code examples falls outside fair use or the permission given above, feel free to contact us at .

Safari® Books Online

Note

Safari Books Online is an on-demand digital library that lets you easily search over 7,500 technology and creative reference books and videos to find the answers you need quickly.

With a subscription, you can read any page and watch any video from our library online. Read books on your cell phone and mobile devices. Access new titles before they are available for print, and get exclusive access to manuscripts in development and post feedback for the authors. Copy and paste code samples, organize your favorites, download chapters, bookmark key sections, create notes, print out pages, and benefit from tons of other time-saving features.

O’Reilly Media has uploaded this book to the Safari Books Online service. To have full digital access to this book and others on similar topics from O’Reilly and other publishers, sign up for free at http://safaribooksonline.com.

How to Contact Us

Please address comments and questions concerning this book to the publisher:

O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (in the United States or Canada)
707-829-0515 (international or local)
707-829-0104 (fax)

We have a web page for this book, where we list errata, examples, and any additional information. You can access this page at:

http://www.oreilly.com/catalog/9781449305352

To comment or ask technical questions about this book, send email to:

For more information about our books, courses, conferences, and news, see our website at http://www.oreilly.com.

Find us on Facebook: http://facebook.com/oreilly

Follow us on Twitter: http://twitter.com/oreillymedia

Watch us on YouTube: http://www.youtube.com/oreillymedia

Acknowledgments

First and foremost, my wonderful wife, Chantal, and boys, James and William, without whose love, support, and tolerance this book would not have been possible.

I would like to thank Mike Loukides for working with me once again on this book project, and the whole O’Reilly team for their high standards of work.

Thank you to Kohsuke Kawaguchi for having created Jenkins, and for still being the driving force behind this brilliant product. Thanks also to Francois Dechery, Sacha Labourey, Harpreet Singh, and the rest of the CloudBees team for their help and support.

I am also very grateful to those who took the time and energy to contribute work to the book: Evgeny Goldin, Matthew McCullough, Juven Xu, and Rene Groeschke.

A great thanks goes out to the following reviewers, who provided valuable feedback throughout the whole writing process: Alan Harder, Andrew Bayer, Carlo Bonamico, Chris Graham, Eric Smalling, Gregory Boissinot, Harald Soevik, Julien Simpson, Juven Xu, Kohsuke Kawaguchi, Martijn Verberg, Ross Rowe, and Tyler Ballance.

Thank you to Andrew Bayer, Martijn Verburg, Matthew McCullough, Rob Purcell, Ray King, Andrew Walker, and many others, whose discussions and feedback provided me with inspiration and the ideas that made this book what it is.

And many other people have helped in various ways to make this book much richer and more complete than it would have been otherwise: Geoff and Alex Bullen, Pete Thomas, Gordon Weir, Jay Zimmerman, Tim O’Brien, Russ Miles, Richard Paul, Julien Simpson, John Stevenson, Michael Neale, Arnaud Héritier, and Manfred Moser.

And finally a great thank you to the Hudson/Jenkins developer and user community for the ongoing encouragement and support.

Get Jenkins: The Definitive Guide now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.