Campfire does Continuous Integration too (2007-10-03)
I love Campfire for software development. It’s a simple, powerful way to collaborate, especially when you take into account the search capabilities and inline images. But it’s even cooler when you start to integrate various tools you use on the side, chronologically folding outside activity into the conversation you’re having with fellow developers; inlining subversion commit notices and providing diff links being the most prominent examples.
One tool I’m really liking these days in CruiseControl.rb from the good folks at ThoughtWorks; it’s a nice, easy-to-configure continuous integration application that plays nicely with the way I think software should be developed (quickly, creatively, and with a barrage of testing). It turns out some thought has been put into extending CruiseControl.rb with builder plugins… and I love building plugins. Seriously.
Did I mention I love Campfire? Bet you can figure out where I’m going with this…
Enter my campfire_notifier plugin, which you can grab here (you can read about the installation process in the CruiseControl.rb docs). It’s probably a bit raw, but it seems to do the job, allowing you to hook any build event you like. Here’s a sample project configuration:
<notextile> Project.configure do |project| ... project.campfire_notifier.configure do |campfire| # ... (account & room configuration is done here) ... campfire.say_on :build_fixed do |build, previous_build| "[CruiseControl] #{build.project.name} FIXED (Build #{build.label}: #{build.url})" end campfire.say_on :build_broken do |build, previous_build| "[CruiseControl] #{build.project.name} BROKEN (Build #{build.label}: #{build.url})" end end ... end </notextile>
I’ve submitted the plugin to ThoughtWorks (with the outside hope it gets bundled), but you got it here first :-)
- Note that I’m aware there are a couple campfire_notifiers floating out there (and all have their merits). I wrote mine specifically to address the need for custom messages and to support the full range of CruiseControl.rb events—which I didn’t find elsewhere.


