Getting up to speed with continuous integration
Lately, I've been looking into getting up to speed with continuous integration after watching the recent dnrTV with Jay Flowers and CI Factory. At Telligent, we've had a continuous integration server setup for quite a while, though it is primarily maintained by Dan Bartels and it handles building of CS and some of the other main projects. I've been wanting to get things expanded to some of the add-ons for CS, with a huge goal of doing nightly builds where it does the whole enchilada: builds the latest CS, updates the version numbers of the add-ons, does a release build against the latest CS, obfuscates, and then packages and MSI and makes it available somewhere. If I could do this, I'd be in heaven, as release time would instantly become a breeze for me (aside from all the coding).
I very quickly got up and going with CruiseControl.Net and using MSBuild to do the building. Going off Dan's existing configurations, it was a breeze. The problem comes in when you want to do the more advanced stuff like auto versioning, executing commands for obfuscating, and building the MSI with the Visual Studio Setup project. So my options are to either come up with some sort of batch execution stuff (maybe PowerShell scripts), or to head into the zone of ccnet + nant + msbuild. The advantage to using nant is that there are a ton of community tasks out there for doing exactly what I need. The disadvantage is a higher level of complexity, especially if you're unfamiliar with nant.
I've tried to use CI Factory to get up and going quickly, since in the dnrTV, they got up and going with building SubText in the hour long show. So far though, I can see some disadvantages to using CI Factory. First, it likes to dictate your file structure. It has its way of organization, and it is all setup to use it that way. Try changing it around, and the scripts it generates can start to unravel. Second, it likes to maintain its own copies of all the executables, which while I can see the reason for it, I don't need it. I don't need multiple copies of nant, subversion, and ccnet. In fact, I just want one unified ccnet instance. And third, for me, it just hasn't worked so far. I'm using the latest beta version, and while it is definitely a sweet utility, it still shows signs of being a beta. Even when I try to let it use its file structure and all, it still get fouled up, likely because I can't move the existing projects into its desired folder structure. But it gets things like failing to start svn, after it has already got a list of the recent changes. And since it has this huge maze of configuration files and build scripts, it isn't necessarily an easy fix for someone who is new to ccnet, new to nant, and new to CI Factory.
I had tried to take the CI Factory scripts and mold them into my desired folder structure and everything, but I only got part of the way. Ultimately, I think I'll end up writing my own nant scripts, maybe using CI Factory as a basis for some of the more advanced stuff, but follow the "start simple, then add more" route rather than "start huge and fine tune".