Daniel Hoelbling-Inzko talks about programming

Another take on Contiuous Integration

Ok, since my last post where I tried out CruiseControl.NET some time has passed.

Although I said last time setting up CCNet is easy and quick, this time I didn't listen to my own advice, and so when I needed a Continuous Integration system I went TeamCity.

TeamCity is great, just click on some buttons and your CI is running.
Log in to the website, configure everything through GUI and you're done.

Sadly, I wasn't done. Something with TeamCity's build runners wasn't working right and it wouldn't resolve my NUnit dependencies and fail to build at all.
I then tried to troubleshoot TeamCity for almost a day before I finally gave up and just installed CruiseControl.NET again.

CCnet on the other hand just worked great, and I was up and running smoothly after an hour or so. And since my last post was lacking, after the break is a step-by-step guide to setting  it up.


I assume you have Visual SVN Server up and running already (or something else), so I'll skip this step.


Download and install the latest CruiseControl.NET from SourceForce

During installation CCnet installs two components, the webdashboard and the CCnet server. The webdashboard will automagically be installed into a IIS virtual directory so you can access it through http://localhost/ccnet

Although you can already access the webdashboard, you will not find much to do there since the CCnet service isn't started by default and is also lacking configuration.

Configuring the CruiseControl.NET server

Now, this is when the fabulous CCnet documentation comes in to play.
In the C:\Program Files\CruiseControl.NET\server\ directory you'll find a file called ccnet.config
I won't cover all basic steps since they are already well documented, but just point out the important ones in my config.

<sourcecontrol type="svn">
  <executable>C:\Programme\VisualSVN Server\bin\svn.exe</executable>

The <sourcecontrol> block configures CCnet to access Subversion and retrieve the source. Notably: tagOnSuccess will automatically create a new tag in the tagBaseUrl directory depending on the later labeller block.

<labeller type="defaultlabeller">

This labeller block has many many options for labeling your build, but I choose to just increment my build number on every successful build with the defaultlabeller. It's a bit too early for my current project, but at a later stage I think I'll exchange that labeller with a iterationlabeller that calculates an iteration number based on weeks since release in addition to the build number.

The nunit block in the tasks section defines where my NUnit console runner is located and what assembly should be tested upon build. It's pretty straight forward, but still I think it's important.

Yeah, and that's all. XML Configurationa always looks awfully complicated, but once you look over the angle bracket porn you'll find it pretty easy to configure and modify.

One tip though: Never try to debug your configuration through the windows service. Run the ccnet.exe from the console so you get all debug output to the console. This makes fixing and tweaking your ccnet.config very easy and less "voodoo".

Because starting is easiest with a sample configuration file. Here is mine:

AnkhSVN 2.0 Subversion client for Visual Studio

I complained before that Visual Studio has no built in support for Subversion, as SVN is currently one of the most common source control choices for open source projects.

One commenter pointed me towards AnkhSVN as a source control provider, but I wasn't working on anything involving SVN so I didn't install AnkhSVN right away - I should have done!

AnkhSVN 2.0 is exactly what I was looking for!
I installed it and it integrated itself very nicely with Visual Studio. Not acting as a AddIn but as a source control provider similar to Visual Source Safe.


So it hooks itself into your solution explorer, showing you the file status within Visual Studio

You can open projects directly from Subversion, and the Pending Changes window helps in keeping track of what changes need to be committed to the SVN (never forget to commit your .csproj file after adding files to your project ;)).

Overall, AnkhSVN works very well and the UI is clean and does what you'd expect from your Subversion client, and it's good integration into Visual Studio helps. No more exception list hacking for file-based clients like Tortoise SVN.

As with most open source software, AnkhSVN is still work in progress, and I've already found some bugs. But if this project continues to evolve I think we have a really powerful tool at our hands!

So, if you want to try it for yourself (strongly suggested), go and grab the latest release (I suggest installing the daily build) from the AnkhSVN project site.
If you find any bugs while using the tool, please make sure to tell the developers. Their issue tracker sucks, you'll need to register and request access to the tracker (but they are pretty fast in granting access).

My Photography business


dynamic css for .NET