Search code examples
asp.net-mvcfirewallwebdeploycontinuous-deployment

Deployment strategies for Asp.Net MVC app on a server behind a wall of fire


One of our clients absolutely insist on using their own server, but refuse to open up IP ports for automatic WebDeploy (don't ask why and how - large enterprise). Usually we have TeamCity installing WebDeploy packages as and when. But not this time -(

We have looked on Octopus Deploy, hoping to install a tentacle on their server and make it poll our server, but Octopus does not seem to work that way.

We are thinking we'll have to write some sort of service that will be polling for new versions of software and if are available, do deployment. But that seems to be a lot of work. I wonder if that exists already and we can just buy this system.

What are the ways to do automatic deployment for a server that can only initiate the connection, but can't accept connection?


Solution

  • I would recommend checking out Microsoft Release Management, which uses a Deployment Agent that runs on the target server to pull in the deployment packages. I've been using it for the last month, and so far I'm quite happy with it.

    I think that you'll get the most out of MS Release Management when you have multiple environments (say, test, acceptance and production) that you want to deploy to in mostly the same way, and maybe want different people to approve each stage. I wrote a couple of blog posts about installing and deploying a release with MS Release Management that should illustrate how MS Release Management can be used.
    You can even integrate MS Release Management with TFS, so that a TFS build automatically results in a deployment to an environment.

    If you only have the production environment that you want to release to, and you don't want all the extra features that MS Release Management provides, you can also consider using Powershell DSC (desired state configuration). By default, it uses 'push' mode, but it can also operate in pull mode, using either a webservice or file share to pull the deployment packages (i.e. .mof files) from.

    -- Edit: I just read your comments about aiming for Continuous Delivery, and I would definitely recommend trying out MS Release Management first, especially if you already have the licenses.