My initial set up consisted of a single project that built a set of applications defined by a text file. Whilst this made adding a new application easy, it had a number of problems:
- Any source control change caused all apps to be rebuilt.
- The reporting was not at the application level - if one failed to build, it showed up as all had failed.
This led to version three, which stayed DRY thanks to the use of DTD entities to separate out:
- Duplicate elements.
- Projects into separate config files.
- Create a modified copy of an existing project sub-config file.
- Modify the main ccnet.config file so it references the new sub-config file.
An alternative approach to this is to use CI Factory. Whilst this does streamline the setup of CruiseControl.Net, I found that once this was done, adding new projects (as above) was easy.
Testing CI Factory did have its benefits though. It led me to consider splitting the Cruise Control service into multiple services, so as to separate the main ccnet.config file into one per group of applications. This may well provide performance gains, as well as remove the problem of changes to one project config causes all to be rebuilt.
Watch this space!