At JBoss, the quality engineering team though relatively smaller in size, is involved with a variety of projects, the details of which can be found at JBoss labs page. Since all of these are open source projects, we follow the well known mantra "Release early. Release often" which often results into several branches of code base. Add to these the fact that some of these projects continuously need to be run against different versions of JDK, databases , LDAP servers, OS and application servers, you have a complex continuous integration (CI) project at hand.
We have been using CruiseControl until recently which is a good CI tool but it lacks some of the features that we really wished for. We were primarily looking for a CI tool that would
- provide a web UI to configure and manage builds of different projects
- run multiple builds at the same time in a distributed environment
- integrate with usual suspects: CVS, SVN, ant, maven, junit, code coverage etc.
We did some proof of concept projects in Hudson some six months back when it was still version number 1.20. After several bug fixes, thanks to a very vibrant community, specially its lead developer Kohsuke, it's currently at version 1.146 which is much more mature and stable with several newer plugins.
We have migrated almost all projects from CruiseControl to Hudson which can be seen in action here. This instance of hudson is our public Hudson instance which acts as sort of reporting tool which also is a testimony to a flexible architecture of Hudson. To make a long story short, we needed a way to utilize servers which are inside VPN but make results available to community on a server outside VPN. We developed couple of in-house plugins that allowed us to publish build results from one Hudson instance to another. As I write, these plugins have been given back to Hudson community. May be it's a bit of exaggeration, but it's a sight to behold when Hudson manages 15 slaves of varied architecture to manage multiple builds simultaneously.
Here is my wish list for Hudson and I am sure it will not be too long before I have my wishes granted as well:
- Per project customization for email notification
- A shell script box to do some custom post build actions
- Configuration for post build action so that it can be configured when to run and otherwise.
- Has an option to provide a priority for builds. It theoretically could lead to starvation for some projects but so be it. :-)