TeamCity is a build server from JetBrains that
I'm starting to like. It checks your code out, builds it, and runs your unit tests against the compiled source code (among other things),
continuously integrating your code each time someone checks-in a change to the repository (or on-demand, if you'd like).
Oh, and it's a bit faster than CruiseControl as well (At least for me).
It's free for many applications - those where you won't use more than 20 user accounts, 20 build configurations, 3 build agents, and don't need anything more than the standard web-based authentication interface. (A build configuration is a way of building using a build agent - e.g., you could build based on a .NET solution file, ANT file, or many other ways. A build agent appears to be the computer itself, though I'm not sure of that yet.)
More...
In any case, there is an "enterprise" license that costs a couple of thousand dollars to get you around most of those limitations. The only exception is the limitation to three build agents - you can buy extra licenses for that at $299 a pop. I can't foresee the need for even two, but that might be because I have yet to see all the functions they serve.
Anyway, if you've been paying attention at least partially, you'll know I'm a huge fan of the
DRY principle, especially as it relates to source code. In that case, you wouldn't be surprised to learn that one of my favorite features is this:
I haven't yet found a way to make the build fail for duplication, but seeing the reports is nice.
I was also a bit disappointed it didn't catch code like this:
public int add(int x, int y) { return x+y; }
public int anotherAdd(int z, int a) { return z+a; }
But, it's nice to know it will at least catch copy-and-paste reuse.
I was set up and running my duplication checks in a few minutes, but finding everything you need is not as painless (setup is mostly painless, finding reasons for build failure and editing is not as easy). It's not hard, by any stretch of the imagination, but they set such a high standard on the "add" part that even the minor annoyances I encountered on the rest seemed large. A lot of that is being new not just to the technology, but some of the terminology they used as well.
Anyway, I've not dived in deep enough to see how or if it might work for other languages or platforms, but if you're using Java or .NET, I'd recommend you give it a try.
Hey! Why don't you make your life easier and subscribe to the full post
or short blurb RSS feed? I'm so confident you'll love my smelly pasta plate
wisdom that I'm offering a no-strings-attached, lifetime money back guarantee!
A quick note for people who get irritated when they forget to push
alt/option on the keyboard when they want to boot into another OS on their Macs:
rEFIt might be for you. It changes the boot-up sequence and pauses every time you boot to allow you to select which OS you want to use. It does other things as well, but I haven't used them yet.
Special thanks to
Grant, who introduced it to me this weekend before he left for Scotland. I think it's going to be a nice time-saver.