This isn’t really BookShelf related, but I figured I’d mention it and give props to my favorite continuous integration build tool.
BookShelf and ShelfServer’s builds have moved from running on Hudson to QuickBuild. I gave Hudson an honest try, but the object-oriented approach to configuration management in QuickBuild is something I just don’t want to live without. Considering I maintain separate distribution paths for beta/release and for full/LT, having to duplicate all of the build settings for each configuration was getting old…
QuickBuild allows you to define common elements of a build at a top-level configuration. Each separate release (Full_Release, Full_Beta, LT_Release, etc.) has its own sub-configuration which only overrides the bare minimum that differs between the releases. For most of my builds, that means only one or two variables. Everything else — source control settings, build scripts, paths, environment variables, etc. is all shared among the multiple configurations. The end result is that going “live” requires minimal configuration changes from what’s been tested for weeks or months at a time in the Beta configurations. Fewer variables means fewer bugs, usually….
I’ve used QuickBuild 1.x at $DAY_JOB for a few years now, and it’s served us VERY well. The new community license option for QuickBuild 2.x made using it for BookShelf much more attractive. The fact that this will also serve as a good introduction to 2.x for when I finally get around to migrating our server at work doesn’t hurt matters either.
If you’re in need of a build server for a small project, I’d definitely recommend taking a look at QuickBuild. While there are no shortage of free/opensource tools to choose from, if you have any kind of multi-tiered release to worry about, QuickBuild makes life quite a bit simpler.
And of course QuickBuild is great for large projects as well — it builds dozens of projects for us at work. More complicated setups would likely exceed the community license’s limitations pretty quickly. Even so, the enterprise license is very reasonably priced considering how much time QuickBuild has saved me. You also get source access with the enterprise license which has been handy for making some enhancements we needed in the StarTeam revision control bindings. Support has been excellent and extremely responsive. They’re one of the few vendors I work with (only two others come to mind) that I actually look forward to working with support.
Comparing QuickBuild 2.0 to the 1.2.x series I’ve been using for the last year or so reveals some really nice new features and improvements. I’m definitely liking the new interface so far. It feels like the settings inheritance that QB 1.x had is finally “finished” in 2.0 with the ability to set just about everything at a higher level of the configuration. I love some of the new visual feed back of overrides like where build steps appear faded out in a sub-configuration if they’re defined at a higher level.
The auto-refresh on build progress is very nice. QB 1.x provided a simple running/pass/fail indication on the summary screen, but 2.x shows step-by-step how the build is progressing. It’s a big time saver to be able to see at a glance from the summary screen how far a build has gone without needing to drill down into the textual log files.
While I’m not yet really taking advantage of them for BookShelf, I’m looking forward to using the build statistics support for the various test & code quality tools at work. We currently use JUnit, Cobertura, PMD, FindBugs, and Checkstyle. I’m definitely psyched to see support for all of those tools built into QuickBuild.
Likewise, while the grid support for distributing builds doesn’t really help me for BookShelf, but it will be convenient to be able to scale builds across multiple servers at work rather than needing a single monster buildbox to host everything.
So, yeah…. That came out sounding a lot more like a paid endorsement than I’d intended, but still QuickBuild rocks. And no, they’re not paying me for this. =)
In other news, the next release of BookShelf is *just* about ready to go out the door to Apple. This release updates the FeedBooks protocol support to work with recent FB server changes and also has a number of performance and user interface improvements. I’ve got one more minor bug to fix, and then off it goes. Maybe tomorrow if all goes well.