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?


I would be looking at webdeploy. It's gotten to be be a serious product lately and you can do anything that is possible to do through UI. Here is a link to a podcast+blog posts from a guy who is pretty serious about zero click deployments.

  • Thanks for the tip, I'll read up on it. How would I go about remotely triggering deployments of certain builds with as little input required as possible? – Robin Weston Oct 13 '10 at 13:09
  • The deployment process handles connecting to the remote IIS, transferring the required files and setting up server options,certificates etc. – Igor Zevaka Oct 14 '10 at 1:45
  • I was thinking more along the lines of how to start the deployment process in the first place. The deployment packages should only live in one location, but any developer should be able to trigger the deploy. – Robin Weston Oct 15 '10 at 12:21

Just set up your cruise control job with an additional exec step that calls Microsoft's Webdeploy with the right arguments off to the right server. The devs can then log into CC.NET and hit the 'force' button for the 'build-and-deploy' job that will build, and then run the webdeploy stage for that particular build. I've got a bunch of them running on CC.net just fine. Let me know if you want specific config details.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.