This post was sparked by some work I've been doing recently, I've been fortunate enough to have time to really get under the skin of continuous integration around a large UK-based e-commerce website. I'm busily working on some hands-on blog posts applying what I've learned to one of my open-source projects, but first a little bit of history.
Since my first encounter with continuous integration (CI) in April 2009, I've been through a bit of a journey with it, along which it's intruded on and controlled a bigger and bigger chunk of the whole software process. I've gone from CruiseControl giving me a simple version number, to unit tests and Selenium tests under Hudson (followed by Jenkins), with recent forays into NuGet feeds, automated deployments and code metrics under TeamCity and PSake.
This whole thing's taken me almost four years to get to where I am today, but looking back it really should have taken me as many months – seriously, if you're just getting started with CI, don't waste time playing with the basics. This post will explain the benefits of the most basic CI setup, and take you step-by-step through my journey towards the ultimate CI that automates every hum-drum, error-prone step of your software build and deploy process.