Continuous Integration with Hudson Continuous Integration Engine

So recently I’ve embarked on a mission to find an easy to use, well developed, feature laden, and extensible Continuous Integration server. Of course, one of the first Continuous Integration servers that popped into my mind was ThoughtWorks’ Cruise Control.

I started test driving the .NET version, CruiseControl.NET (CCNet). I was really impressed by all its features, so I took a shot at the original Cruise Control built for Java. Surprisingly, this version was not as easy to use or as powerful as CCNet.

Don’t get me wrong. The Java version has a lot more built-in support for different software configuration management systems (SCMs), publishers, etc. But it does not do the things I wanted it to do, things that CCNet did do. For example, if there were changes detected in the repository, I had to manually add a separate task to update the working copy. Also, there was no tagging option on successful builds or advanced schedule timing.

So it was time for me to turn to an alternative choice for Java … and I started looking at Hudson, an extensible continuous integration engine. Boy, did I hit a gold mine!

First of all, deploying and running Hudson could not be easier. You simply need to deploy a war file to a servlet container. I popped it in Tomcat and I was up and running. No databases, no nothing! Naturally, the web configuration interface is much easier to use than setting up the tedious Cruise Control xml file:

Hudson Continuous Integration server

The smooth interface is a bonus as it makes it really easy to monitor projects. Although I did like Cruise Control’s build reports a little better, the ones available with Hudson are not too shabby.

But here is the best part. Look at all the default plugins available:

Hudson Continuous Integration engine for Java

The list goes on and on as you can probably tell from the scroll bar. Not only are these plugins easy to install (check-click-restart) and provide great add-on features, custom plugins are also very easy to develop.

I have yet to try using Hudson with .NET projects. Judging by how well it is going so far, I am tempted to port the .NET projects over from CCNet in order to maintain one Continuous Integration environment.