There is no denying the trend in the enterprise Java community towards a growing enthusiasm for continuous development tools and techniques. It's a bit of a conundrum when you consider that this approach to software development and deployment isn't really something new. Many organizations have achieved continuous integration (CI) and continuous deployment in the past using tools like Maven and CruiseControl. But today's more finely-tuned tools are really upping the game. The rise of Jenkins and its counterpart Hudson has transformed the landscape at a fundamental level, enabling continuous integration on a scale the industry hasn't seen before.
How to become a Jenkins expert
Step 2 -- Create your first Jenkins build job
Continuous integration spawns continuous communication
John Smart, the author of Jenkins: The Definitive Guide, says this generation of CI is really about teamwork - using continuous integration and continuous delivery as vehicles for communication. For example, with continuous delivery, software is available at any point in time and can be deployed whenever you're ready. Add automated acceptance criteria with living documentation and hook into your Agile project management software like Rally or VersionOne, and you get visibility of the state of the project automatically.
And that's just the beginning. Besides integrating with automated testing, a CI system can also be connected to the manual test suite. "Then you've got the QA guys running their manual tests and the automated acceptance criteria written by the developers and the QA guys together, defined by the whole team up front to go into the continuous integration system. At any point in time, you know where your features are at that you're trying to deliver in a sprint or iteration. You might see on the dashboard ten features with seven done, one broken, and two in progress. That becomes an automated dashboard that the QA guys find useful. They don't have to dig up the information, just go to the dashboard and get their release reports automatically."
Ironically, this aspect of improved communication is about making team members less reliant on each other for every little piece of information. That way, they can focus on talking about the things that matter – like creating a working product faster. In effect, today's CI solutions automate a great deal of communication so teams can become more integrated.
Why is Jenkins so popular?
While Hudson is often mentioned in passing, Jenkins does seem to hog most of the spotlight in the CI world. With its open source flexibility, Jenkins evolved rapidly and became the standard for build and integration tools. Paul Swartout, author of Continuous Delivery and DevOps: A Quickstart Guide,, points to the organic roots of Jenkins as a key to what made it a crowd favorite. "Jenkins is written by developers and for developers in the community spirit. It takes away some of the drudgery of building and testing and automation."
Java Champion Michael Hüttermann, author of Agile ALM: Lightweight tools and Agile Strategies, feels this solution is already very mature. "Jenkins provides an open architecture. It's a neat core and with many hundreds of plugins. You can add any feature sets you need. If concrete project requirements need a specific feature, it's easy to enhance or enrich Jenkins by writing plugins or extending and integrating it with other tools."
What else is in the Toolkit?
Of course, even with lots of plugins, Jenkins still can't do everything. We made sure to ask our experts about their other favorite continuous integration tools. For Java, John Smart recommends Spock as a nice framework for low level TDD test automation. JBehave and Cucumber are go-to tools for acceptance criteria. They aren't for unit testing, but serve as collaboration tools that promote collaboration and support a healthy team dynamic.
Michael Hüttermann mentions development teams checking infrastructure with Puppet or Chef. This aspect of CI is just as important as continuously testing the code. Paul says Graphite is a good tool for measuring non-functional requirements. It can also be used in conjunction with Nagios in some novel ways. One team he knows actually uses these tools on their live platform for ongoing monitoring to see trend differences and give feedback to engineers.
What does the future hold for continuous integration tooling?
According to Heuttermann, he expects that CI will continue to be streamlined to include the complete lifecycle. But this will happen in a modular way as part of an open source tool chain. Here's his advice: "Keep up with the open source mindset and monitor the market to watch for new, upcoming tools. If it's necessary, when a new powerful tool arises, exchange one node in this overall tool chain without touching any of the other links." In other words, keep continually integrating the best tools into your CI process.
What tools do you find to be indispensable when doing Agile development and continuous development? Let us know.