Strategies for deploying an Asp.Net MVC application to a server behind a wall of fire

One of our customers absolutely insists on using their own server, but refuses to open IP ports for automatic WebDeploy (don't ask why or how - large enterprise). Typically, TeamCity installs WebDeploy packages as and when. But not at this time - (

We reviewed Octopus Deploy, hoping to install a tentacle on our server and make it poll our server, but Octopus doesn't seem to work that way.

We think we need to write some kind of service that will poll for new software versions, and if they are available, deploy. But it looks like a lot of work. I wonder if this already exists and we can just buy this system.

What are the automatic deployment methods for a server that can only initiate a connection but cannot accept a connection?

+3


source to share


5 answers


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

I think you will get the most out of MS Release Management when you have multiple environments (like test, commit, and production) that you want to deploy, in basically the same way, and perhaps want different people to approve every stage. I wrote a couple of blog posts about installing and deploying a version with MS Release Management which should show you how you can use MS Release Management.
You can even integrate MS release management with TFS, so that the TFS build will automatically lead to deployment in the environment.



If you only have a production environment that you want to migrate to and do not need all of the advanced features MS Release Management provides, you might also consider using PowerShell DSC (Desired State Configuration). It uses "push" mode by default, but it can also run in pull mode using either a web service or a file share to pull deployment packages (ie mof files) from.

- Editing: I just read your comments about the pursuit of continuous delivery and I definitely recommend trying MS Release Management first, especially if you already have licenses .

+1


source


Octopus Deploy should work. it supports polling mode.



Read more about this here: http://docs.octopusdeploy.com/display/OD/Polling+Tentacles

+4


source


Why don't you just install "Windows Update Service" using Background Intelligent Transfer Service (BITS) to boot, like billions of Windows PCs and servers?

+1


source


Writing a PowerShell script to download and deploy a package should be fairly trivial:

$wc=new-object system.net.webclient
$wc.UseDefaultCredentials = $true
$wc.downloadfile("your_url","your_file")
msdeploy.exe -verb:sync -source:package=<your_file> -dest:metakey=lm/w3svc/1 > DWSpackage6.log

      

I missed the code that checks for a new version. Assuming you have a different url to get the latest version number, this is trivial as well.

After testing the script, just use the scheduled task to run it from the client server.

+1


source


If you can install TeamViewer on your server, you can use its VPN function to do whatever you want. However, you need to manually connect using TeamViewer, enable VPN, and only then can you WebDeploy. I don't know if this fits your "automatic deployment" scenario (and you may not be allowed to install TeamViewer in the first place).

I believe other VPN solutions can take just as long as initiating a connection from their side. Could it be easier to develop a script that opens a connection than a complete deployment tool?

+1


source







All Articles