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?