At the company I work for, we have a CruiseControl.NET server to run our Continous Integration builds. Our typical project CI process includes the following steps:
- Check for changes in Subversion repository and pull down changes
- Build the project
- Run unit tests
- If all unit tests pass, deploy to "Dev" server, for developer testing
As part of our standard web project process and environment, we have the following web sites in place for each project:
- Developer's machine (where the developer writes code)
- Development Test (the CI end-point)
- Test Lab (for internal QA cycles)
- UAT (end-user acceptance testing, if we host it)
- Production (if we host it)
I think this is a fairly common setup for web development projects, in Agile-type shops. We do some agile process and development practices, and we're constantly adding to them. Overall, I'm happy with our environment and processes.
Here the problem, though: Our company has grown rapidly in the last 2 years, and we now have around 10 different web projects that are either in active development or as-needed-maintenance cycles. With so many web projects in place, the process of promoting code from our Dev server out to the Test lab, and then out to UAT and Production, has become a nightmare. Until now, we have done remote desktop sessions onto the build server, and manually run the builds against a Tag in subversion, for the deployment to Test/UAT/Production. This is not a viable solution, anymore. We have too many projects, with too many developers, and a too many people would need to log into the build server and run builds manually.
The question is: How do we promote a build from one environment, to the next, automatically and on-demand?
What are common solutions for automatic build promotions? We want to set up our environment so that we can automatically push a build from the dev site, up to Test, up to UAT, and up to Production, as needed. We want to be able to click a button and have the process to do the promotion kick off immediately, pushing from the correct location to the correct location. Any links to articles, any advice and general direction, any specific tools that you can recommend... any help at all... we've been trying to find a working solution for this, for a while now, and have come up with nothing.
We are not afraid of change or spending $ when needed... if we need to move away from CruiseControl, if we need to buy hardware and software... we need a solution that works. We need it to work for .NET development, specifically. Our current ASP.NET projects are in .NET 2 and we are planning to move to .NET 3.5 as new projects come along or existing projects need big work.