Jared‘s Weblog

Main Page - Blog - Books - Links - Resources - About - Contact Me


This page is based on the Continuous Integration appendix (Appendix D) in Ship It!.

Continuous Integration Software

A CI system automatically builds your project every time you make a change to it. It watches some set of resources (such as a source code repository, a file system, or even another project), and when they change, it kicks off your build script. When the build is complete, the CI system tells you (or any other important party) the results of the build.

Martin Fowler and Matthew Foemmel wrote an article about Continuous Integration that‘s great introduction to the concept. It‘s located on Martin‘s web site.

What’s Available:

CruiseControl-An open-source CI system written in Java, CruiseControl has a lot of functionality and an active developer base. It’s the one we use.

CruiseControl.NET- CruiseControl for the .NET Framework. A somewhat different set of features than CC for Java but the same concept.

AntHill- Termed a build management server, AntHill imposes its own build scheme on the build process. However, it has a very nice web interface instead of configuration files. This makes setting up your projects almost trivial. AntHill has both an open-source and commercial version, with extra features available only in the commercial version.

Continuum- Continuum is a new CI system that is designed to be very tightly integrated with Maven. It has a “zero configuration” feature that will seamlessly integrate an existing Maven project.

Key Concepts:

Configuration

How you set up the system. A lot of CI systems use configuration files, but some (e.g., AntHill) use a web-based interface.

CI “engine”

What actually watches for changes and executes the builds.

External interfaces (e.g., JMX, RMI, web page, COM, XML-RPC)

How you control the CI system while it’s running.

Supported build tools

The things that the CI system can do (e.g., compiling, linking, deploying, installing).

Integration with other tools

Running new tools from your CI system.

Notification mechanisms

Ways to notify the CI system’s users that a build succeeded or failed. This can include email, web pages, RSS feeds, or lava lamps.

Logging and metering

Tracking and presenting information about what got built when and whether the build passed or failed.

How to Choose:

Can easily build your project-Can the CI system build your project without jumping through a lot of configuration hoops?

Runs on your platform-Does it run everywhere you need it?

Works with your other tools-Can you easily tie in your code profiler, installer, deployment tool, etc.?

Scales to the number of projects you need to build-If you have a lot of projects to build, you need a speedy CI system.

Fully automatic-No manual steps should be required.

Provides appropriate notification-Can it tell you what’s going on in a way you’ll notice?

For More Information:

See Practice 4, Build Automatically,, on page 30 of Ship It!