Currently we use Cruise Control .Net and Nant to build deployment packages for our ASP .NET website. Essentially this just versions and the files, compiles the code, then creates a zip file. It is then up to the deployer to remote desktop onto the target machine, download the zip file, unzip it, and place the contents in the correct IIS folder.
We want to automate this deployment process, so I have written a batch file to do the manual work. It downloads the zip file using wget from our build server, unzips it, stops iis, replaces the web files, and then restarts iis again. The problem is that this file has to be run on the target machine itself, and I'd like to remove any need to connect to the target machine directly.
Another requirement is that we can redeploy the same build to different servers. So therefore I want to select a previous build, and say "deploy this to server X", without having to rebuild the website at all. This is for when a build has been tested on our Teset Server and we want to deploy the exact same build i.e. same zip file to our Production servers.
I have considered using psexec to run the batch file remotely, and while this should work, means that each deployer will need psexec installed on their machine, which isn't ideal. I'd like to hide the implementation of the deploy as much as possible, and just make it a simple point and click exercise.
I guess the ideal scenario would be to somehow hook the deployment stage into our Cruise Control dashboard, which drop down lists of builds and servers to deploy to. We could then select the build and target server, and the build server (where Cruise Control is isntalled) would use psexec to deploy the selected build on the target machine. However, I don't think this is possible.
Does anyone have any suggestions?