The other day, in discussing the virtues of automated continuous integration with a client, I came across a few excuses for not adapting the process. The argument goes like this:
“We don’t have enough hardware resource for a build server.”
“I am the sole developer so I don’t need it.”
My response for the first excuse is one word: “Virtualization.” A build server does not require a lot of resource nor tremendous CPU power. If you don’t have a spare computer, what about spare a portion of your computer? A 256MB memory partition and 5GB of disk space is enough to host an OS complete with CruiseControl.NET, nAnt , nUnit, Visual Studio 2005, and even SQL. Another advantage of using a virtualized build server is that you can make a snap shot of a working system and easily revert to it in the event that your build process corrupts the system (such as the install script screwing up the registry hive or SQL script dropping the wrong database).
The second excuse is just as invalid. First of all, the practice of continuous integration enforces good development habit. If you have unit test for all your work, you are already way ahead of the curve. Why not leverage the power of the computer to help you with integration testing as well? Secondly, how many of you can honestly remember all the intricate code you wrote months ago and can confidently alter it without extensive regression testing?
I, for one, like to refactor my code as I progress through a large project. Some of my changes may pass my unit test but fails in an integration test. As I usually partition my projects so I am only focused in one portion at a time. Automated continuous integration helps me catch problems like that before it gets too hairy to tackle.
Remember, automated continuous integration is your friend.