We've been doing a lot of recruiting at Wotif recently, so I've been doing a lot of resume skimming and interviews of late. And I've noticed, amongst many other things, statements like this: "Oh, yes, we did continuous integration; we used CruiseControl!"
Folks, using CruiseControl is not continuous integration. And that's coming from a former committer on the CruiseControl project.
This is a point I've tried to hammer in to various people a lot: All CruiseControl really does for you, at its core, is:
- monitor your version control repository for changes;
- run your build script;
- let you know how the build attempt worked.
This doesn't add up to continuous integration, by itself. After all, your build script may only do a "Hello World" message.
To be fair, most people wouldn't have build scripts quite that stupid. But how many people have build scripts sophisticated enough that they are "continuously integrated"?
Furthermore, continuous integration isn't just about tool support, though I am firmly convinced tool support helps. Continuous integration, at its heart, is a cultural commitment, and requires the buy-in of the people in the team. No tool can do that for you.
Martin Fowler wrote the original paper that spawned the CruiseControl project (though Continuous Integration, as a concept, had been documented before that). He lists ten items things that make up Continuous Integration - CruiseControl only provides three, maybe four. A good build script, with a damn good set of tests, can give you three more items, and can help a lot, particularly with giving confidence and creating a "turn-key" deployment. However, for the rest (and even just to get those!), you still need the buy in from the team.
Comments (4)
well, on the other side the ledger, we don't do full XP either -- iterative waterfall in miniscule increments is really it.
Posted by Anoynmous Coward | July 13, 2006 4:48 PM
Posted on July 13, 2006 16:48
I completely agree and am still amazed at the misunderstanding around the term 'Continuous Integration'; it has now become a buzzword which is being used by managers to implement 'good software development'. If there are no tests, no extra conditions on the build are being checked (e.g. reports, etc.), and no one is actually fixing a broken build - then this is not continuous integration; rather it is just ant being run irregularly!
Posted by Mark | July 14, 2006 8:59 PM
Posted on July 14, 2006 20:59
Our Parabuild support turn-key deployment via build parameters. Indeed, a build script should know what to do when it is requested to run production deployment.
Posted by Slava Imeshev | January 24, 2007 6:52 AM
Posted on January 24, 2007 06:52
I have to disagree with you on this, Slava... I don't believe that the build script that developers use, day in day out, should know how to do a production deployment. For one thing, production deployments may not be a simple turn-key operation.
A build script should know how to deploy for the developer - otherwise it can't run automated tests. The continuous build server should be able to deploy a build for manual testing, either via the build script or some other mechanism (at Wotif, we use CruiseControl to publish builds to a staging server, where our testers have scripts to deploy a named build).
Production deploys, however, can be more complex. In our environment at Wotif, for example, we upgrade one node at a time. While the upgrade step is largely scripted, we don't want to have this completely automatic at this time.
What I would say is that the build server should publish, as an artifact of the build process, the packaged software ready for the "turn-key" deployment.
Posted by Robert | January 27, 2007 11:06 PM
Posted on January 27, 2007 23:06