The benefits of an automated build/test/package system are, in my opinion, quite obvious. But sometimes it takes a little bit more than statistical evidence to get you motivated. At my current project, we've been thinking about setting up such a system for some time now, but it wasn't until a colleague of mine stumbled upon the system described in Mike Clark's Pragmatic Project Automation that we realized we could include Lava Lamps and home automation devices to display the status of the current build. Fun stuff!
I'm happy to report that the system has been functional for about a week now, and I don't know how we ever lived without it. The Lava Lamps (or 'Extreme Feedback Devices' as Mike Clark calls them,) are very effective. As soon as someone sees the red light come on, they immediately look to see who made the last change to the code base so they can begin their tormenting. The system truly makes you want to keep your code base clean and your unit tests running without any errors.
If you're thinking of implementing a similar system, here's a list of things you'll need to get things rolling:
- X10 FireCracker home automation kit
- CruiseControl automated build system
- An Ant build script for CruiseControl to invoke
- The X10 Publisher for CruiseControl written by Mike Clark
- Two Lava Lamps to indicate the build status
Extensive documentation is available in the book and on the book's website to fit these pieces together, but a few snags and surprises were discovered along the way that I feel should be documented.
- The Java Communication Library (in its current version of 3,) is not available for Windows. Therefore, if you're forced to work on a windows machine, its up to you to find a copy of the old version 2 Library. I found a copy of it here.
- The X10 devices don't seem to work as advertised through our building's electrical system. We found that the transceiver and the lamp module have to be plugged into the same power strip. This presented a problem for us, as we wanted to have a single transceiver with multiple lamp modules scattered around the cubicle farm. We were able to get around this by using a transceiver and a lamp module at each cubicle. I don't know how far the transmitter will work, but we tested it up to about 12 cubicles away without any problems.
- CruiseControl gives you the ability to automatically send e-mail to certain people whenever the build breaks. We thought this was such a cool feature that we just couldn't wait to throw a bunch of e-mail addresses in there. Be warned that as soon as your manager starts receiving these, he/she will get all kinds of crazy ideas ("Let's integrate this thing with PeopleSoft and include it into our monthly report to the steering committee!")
If I run into some spare time in the near future, I'm gonna see how hard it would be to get this thing running within a Ruby On Rails development environment. If that day ever comes, I'll be sure to post my findings. In the meantime, be sure to hit me up with any suggestions!