Something’s been bothering me for a while. According to what I’ve read, lots of folks out there seem to be releasing their [tag]Continuous Integration[/tag] builds. A lot of tools even seem to have this notion built in. For a while now I’ve been assuming that sooner or later we’ll switch to doing things this way, but now that I come round to giving it some proper thought, I’m not convinced it’s the right thing to do. Maybe someone out there will change my mind on this one.
The problem, as I see it, is that by releasing CI builds, I’m giving up control on what I hand over to the customer. Or more precisely, if I want to maintain that kind of control, I have to pay for it by limiting what developers are checking in to the Main/Head of development. At the base of all this is the way that we use [tag]CVS[/tag] and [tag]TFS[/tag] labels. Developers here use release labels to indicate what it is that they intend to release. (Often these release labels are applied on release branches, but that isn’t really important here). Our SCM team use the label to extract, build and ship the various applications we’re building. The fact that developers can label what they wish to be delivered gives them fine-grain control over what goes out, and doesn’t interfere with their decisions to commit work for the next release.
Using CI to create releases means that it is [tag]Cruisecontrol[/tag] (or [tag]Luntbuild[/tag] or whatever CI engine you want to use) that does a build label. One of these CI builds gets labelled with a release label and shipped. What gets labelled depends on what happens to get checked in since the last CI buld. What do you do if you want most but not all of a given group of changesets, perhaps along with a little of the following group? No CI build label exist to represent this! If I want to correlate the CI build labels to release labels, I have to coordinate the checkins that developers are doing. Besides being impractical, this is eerily reminiscent of the kind of heavyweight bureaucracy we have been shunning for almost the last three years.
Now I know there are a lot of clever people out there who release their CI builds, so I’m just curious how it works for them. How do you square this circle?
– brendan lawlor –