Thank you all for your kind suggestions. We checked them all out, but after careful consideration we decided to roll our own with a combination of CruiseControl, NAnt, MSBuild and MSDeploy.
This article has some great information:
Integrating MSBuild with CruiseControl.NET
Here's roughly how our solution works:
- Developers build the 'debug' version of the app and run unit tests, then check in to SVN.
- CruiseControl sees the updates and calls our build script...
- Runs any new migrations on the build database
- Replaces the config files with the build server config
- Builds the 'debug' configuration of the app
- Runs all unit and integration tests
- Builds the 'deploy' configuration of the app
- Versions the DLLs with the current major/minor version and SVN revision, e.g. 1.2.0.423
- Moves this new build to a 'release' folder on our build server
- Removes unneeded files
- Updates IIS on the build server if required
Then when we have verified everything is ready to go up to live/staging we run another script to:
- Run migrations on live/staging server
- MSDeploy: archive current live/staging site
- MSDeploy: sync site from build to live/staging
It wasn't pretty getting to this stage, but it's mostly working like a charm now :D
I'm going to try and keep this answer updated as we make changes to our process, as there seem to be several similar questions on SA now.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…