Do you CI seeing U CIing? Continuous Integration

Written By John Sonmez

Is your team using some form of continuous integration?

If not, why not?

Continuous integration is one of the hallmarks of a good development process.  I've done continuous integration for many years now on every project I work on.  I am usually the one putting up the continuous integration server because I consider it a “must have.”

What is continuous integration?

If you don't know what continuous integration is, it is basically a build server that builds the software every time someone checks in a change.  If you are familiar with the terms nightly build, or weekly build, continuous integration is every check-in build.

I have a nightly build, why do I need a continuous integration build?

I will start here and assume you understand the value of a nightly build.  The biggest issue and reason is one simple word:

FEEDBACK


The tighter your feedback loop the more accurate your steering.  Imagine if turning your steering wheel in your car had a 2 second delay between the wheels actually turning.  Or when you looked out your rear view mirror, you actually saw the image that was there 2 seconds ago.  Would that affect your driving ability?  I certainly hope it would.

The driving metaphor is the image of the nightly build in contrast to a continuous build.  When you are getting nightly information on whether or not your build broke, you are getting information too late.  By the time you course correct, you have lost valuable time and some of your developers may have steered right into a ditch.  As soon as someone has committed bad code, I want to know it, and I want them to know it.  Every second the build remains broken is time that other developers are unable to get the latest code and build the system or check that their changes did not break the build.

How do I get some of this continuous integration goodness?

There are many options out there, and most of them are pretty good actually.

For the .NET world, Visual Studio Team Systems actually has a continuous integration server integrated now called Team Foundation Build.

There is the classic Cruise Control .NET, Java also, but kind of moldy Cruise Control.

For Java or .NET I am liking Hudson now, although it is probably better for Java.

I have heard good things about Luntbuild, and TeamCity.

What makes a good continuous integration system?

In my next post I'll cover how to set up your server from a perspective of what should you have and what things are important.  I'll talk about unit test support, code coverage and all the other good things you should do with your CI server.