A big thank you to Chris Stevenson for giving an “Introduction to Continuous Integration with a brief introduction to Cruise Control”. Chris works for ThoughtWorks. He has worked in many of the offices, most recently in Beijing and is en route to San Francisco where he will be lead developer of Cruise Control Enterprise.
Chris presented a solid introduction to continuous integration (CI) citing Martin Fowler’s work on CI. According to Chris, CI is about ensuring we have working, compiling code that passes unit tests. While many consider CI to be a tool, Chris made it clear that CI is actually a software development practice that is often supported by a tool, but does not have to be. As a result CI is a practice that is used by the team. Automated CI tools are important on projects that have larger teams. CI is the practice of continually integrating code changes made by members of a team with the code base, ensuring these changes don’t break the build in any way. This is verified by running an automated build (as distinguished from a CI tool) that compiles, tests and creates deployable artifacts.
Automated builds must include automated tests: both unit and behavioural tests. Chris introduced the practice of behaviour driven development (BDD), with specific reference to the tools RSpec (for Ruby) and JBehave (for Java). Chris also introduced a number of tools used for user interface testing: Selenium, WebTest, Sahi, Frankenstein, White, Abbot.
Chris spoke of the importance of small continuous commits to the code base. Small changes limit the amount of merge conflicts that occur when checking code into source code control systems and therefore minimising the pain that is associated with conflicts. It is therefore common for people to check code in many times a day. Chris highlighted the importance of a short build, discussing the implications of a build that takes a long time to complete.
Chris ended his presentation with a sneak preview of Cruise Control Enterprise which is to be released in the next week or so.
Interestingly, Eric Minick recently wrote a blog entitled “Continuous Integration: Was Fowler Wrong?“. Eric’s premise is that CI is about tests, not builds. Given the controversial nature of this, a discussion has commenced on The ServerSide.
A Code Jam will be announced in the next day or so which will provide a practical introduction to Continuous Integration tools and how to use them. So, stay tuned…