Book review: Jenkins, The definite guide,(J.F Smart), O'Reilly.
Continuous Integration became a point of interest in the enterprise software development world, in the recent 5 to 6 years. In the Java EE case, we are happy enough to see tools and practises evolving rapidly, becoming tools of reference for other technologies and contributing the most to modern software development teams and methodologies.
The induction of build servers / C.I (nowdays) tools has boosted software development efficiency (when used), increased long awaited automation on several tasks that required lots of estimated man-hours in the past and helped reduce the amount of errors, bugs and inefficiencies on a software project.
I was lucky enough to participate in development teams that have embraced early enough several build server software and integrated into their software development methodology. Tools such as Continuum, early releases of Hudson and nowdays Jenkins. Some of them nowdays are evolving through the cloud either as an S.A.S offering, or a mixture of related resources. Since the devops saga is still evoling in the software development community, the knowledge and skills related to such tools are becoming important not only for modern administrators but to software developers as well.
Jenkins, the Definite Guide is a must-read book for every devops admin or software developer who wants to either make a first dive into the C.I integration world or extend his already (maybe limited if he/she was not totally exposed up until know) knowledge on the subject. I personally consider using such a tool as a must for every new Java Enterprise Project being currently developed or about to start. The better you are familiar with the extensive power and flexibility given by your C.I server the more you are going to gain in terms of productivity, automation, saving work force hours and providing a more robust deliverable.
The first four chapters of the book are expanding from a good and solid introduction to the principles of Continous integration to a concrete guide on installing the latest flavor of Jenkins. Since I have installed and partially configured hudson in the past (sometimes experimenting in different environments) I found all the details covered in the book concrete enough. The author did a very good job on covering installation issues and flavors on many cases and underlying operating systems. You will find adequate information on setting and configuring your Jenkins server both as a standalone process or as a web application (something very relevant for larger development teams).
The fifth chapter, (IMHO could have been 2 smaller) is going through in large detail around setting up a simple build project, using a freestyle configuration. The author, using a small software project which can be found online is configuring Jenkins to pull the project from various Source Code repositories, build it using maven, deploy it, run tests or experimenting with other build related software tools such as Ant, Groovy scripts etc. It is a quite good introduction of the main features of Jenkins and the potential tools that can be used along with it.
Chapters 6,7 and 8 cover some quite important features that are going to be levereaged by any user /team when they have completed mastering the basic stuff, and have a first flavor or automation in their project. An important phase of the C.I cycle is testing, so the author goes through covering topics of testing inside the Jenkins environment. Quite complete chapter and quite rich list of mainstream tools integrated like Cobertura or Clover. Security and notification services are the next two chapters, and I was very surprised by the technical debth of informatiuon provided on the how-to sections related to integrating Jenkins with several security domains (LDAP, MS based domains, Unix) + complete overview of the built in Jenkins security and role management configuration.
Chapter 9 covers the important topic of code quality (one of my favourite features on such tools) and how a potential user can integrate modern code quality tools such as Checkstyle, PMD, Findbugs or others into their C.integration environment. Some of these tools are already famous among java developers for years now, so the book is eventually quite up to date with all their related features.
I really enjoyed chapter 10 which illustrates the power of Jenkins on providing the feature of disitributed builds. Having seen several build servers trying to cope with large code bases, thousands of integration of functional test suites and numerous hardware configurations failing due to high use, this is a killer feature that I hope to see it becoming mainstream (when it is needed). The book does a very good job on providing details about why and how you could leverage the distributed job functionality of Jenkins.
Overall, I think this book should be a must have for any corporate library and any team currently using Hudson or Jenkins as their mein C.I environment. It can be called a reference book, and most of the time the current information related to the recent builds is already covered. There are minor cases at the time being where the reader will have to resolve on googling for setting upa project or fix a configuration issues. Definitely worth buying. I hope to see and read more concrete books on structure and content as this one on 2012.