I tried to set up CruiseControl to handle multiple releases among different projects. All the projects share the same build scripts (which is a whole build project, sounds odd, ah?).
My original plan for the file structure was:
___CruiseControl (cc installation)
|__projects___ config.xml
|___webapps
|___trunk
|___release1
|___release2___build
|___project1_quick
|___project1_nightly
|___project2_quick___checkout
|___target
|___logs
|___artifacts
With this file structure, everything related to the project is under one directory tree. If you want to remove an obsolete project from cc, you don't have to delete files from multiple places.
But I hit a road blocker when I tried to set up logs and artifacts. There is no way to archive the above goal if I don't modify CC source code. I could make the build without any problem, but the reporting system crashes. Since CC index page will look for projects under default logs directory. After considering the design carefully, I think it makes sense for CC to setup this way, since it will avoid another setup to tell cc the available projects.
Now I will change projects directory setup to a flat file structure like what I did at other clients:
___CruiseControl (cc installation)
|__projects___ config.xml
|___webapps
|___checkout
| |___trunk-build
| |___release1-build
| |___release2-build
| |___trunk-project1-quick
| |___release-project1-nightly
|| ...
|___target (the same as checkout)
|___logs (the same as checkout)
|___artifacts (the same as checkout)
But I'm still wondering if there is a better way to remove obsolete projects/release branches easily.