CruiseControl and PDE build

Over the years I’ve made several ANT based build systems, some were advanced such as the one where build configuration, artefacts, etc. were handled by Plone. Others quite simple, such as the one I’ve up to now been using for the aggregator plug-ins. This was a simple bash script that started a PDE build at regular intervals.

Since the IBM Rational changed the Jazz license I’ve been pondering if I should start using it. But since I’m a one man team and already have Bugzilla and CVS up and running I just need a better build system. (Also; NASA have started using Bugzilla for ISS and the Endeavour space shuttle, so I guess it’s good enough for me.)

People I’ve meet at various Eclipse conferences have been in favour of CruiseControl. So I decided to take a look at it and see how I could get a continuous build system for the aggregator.

Preparations

I started by adding a new user to my server, builder. The credentials of this account will be used to run the CruiseControl instance and perform the actual building. The account also have access to the CVS instance where the source code is kept. The CruiseControl installation was made in the home folder of the user.

In order to avoid specifying the CVS password in the build settings I logged into the server from the shell: cvs -d:pserver:builder@amon:/data/cvs/resheim -q login. The credentials will be stored in ~/.cvspass so I won’t have to log in again.

While in ~/cruisecontrol/projects I checked out the build project for the aggregator plug-in. cvs -d :pserver:builder@amon:/data/cvs/resheim checkout aggregator/releng. This project contains the familiar allElements.xml, build.properties and my build script; build.xml.

I’m using the standard Eclipse PDE to compile against. Since the aggregator is depending on Apache Derby for storing it’s data, this plug-in is also added to the base installation which have been placed in ~/eclipse_3.4.

Configuring CruiseControl

The project configuration (which must be in CruiseControl’s config.xml file) is shown below. An ANT script (the build.xml referred to above) will be called every five minutes with a set of arguments.

I tried to make the configuration as simple as possible. Only two environment properties must be specified: The location of the build directory and the location of the Eclipse installation. Everything else are found in the build settings and are not related to how the build host is configured.

A bootstrapper is also configured. This will ensure that the build script is up to date before each invocation. We’re also not going to build anything unless something has changed. Hence the modificationset element.

<project name="aggregator">                                             
<schedule interval="300">
<ant                                                                 
uselogger="true"
usedebug="true"
antWorkingDir="projects/${project.name}/releng/">
<property
name="buildRoot"
value="/home/builder/cruisecontrol/projects/${project.name}/"/>
<property
name="eclipseRoot"
value="/home/builder/eclipse_3.4/"/>
</ant>
</schedule>
<bootstrappers>
<cvsbootstrapper
overwriteChanges="true"
localWorkingCopy="projects/${project.name}/releng"/>
</bootstrappers>
<modificationset quietperiod="30">
<cvs
cvsroot=":pserver:builder@amon:/data/cvs/resheim>
module="aggregator" />
</modificationset>
</project>

Wrapping up

I’m not going into details about PDE build here as this is probably already familiar. It’s sufficient to say that the Aggregator set-up is bog standard.

CruiseControl is easy and straightforward to get started with. It has a lot of features that I have not explored yet (but I will) and those used so far worked flawlessly. If you’re in a need of a build system for your Eclipse application, this is something you should take a look at.