Internal deployment to test servers on IIS with Production deployment to Azure

I’m a bit confused by the intended workflow. So I’ve got:

BUILD01 Build Server - TeamCity and Octopus Deploy installed

  • DEV : (DEV01 Server - Windows 2012 VM with Web Server Role for dev testing, OD Tentacle installed)
  • QA : (QA01 - Windows 2012 VM with Web Server Role for QA testing, OD Tentacle installed)
  • UAT : (UAT01 - Windows 2012 VM with Web Server Role for UAT testing, OD Tentacle installed)
  • AZUREPROD : (Azure Website on Azure for production)

So everything’s been going great through DEV, QA, UAT and now it’s time to configure deployment to Azure to get our new Production going. I understand that I need to install a OD Tentacle somewhere to be the thing that does the work so I installed a Tentacle on BUILD01. So then I start to configure the AZUREPROD environment, I add in BUILD01, and I create a new “role” of Azure where DEV01, QA01, and UAT01 all have the role of Web. Here’s where things get sketchy for me. I have 3 existing projects that are deploying my 3 website projects (Web, API, and Admin) to DEV, QA and UAT like a champ. I go to my existing Web project and I see that Step 1 is a “Deploy a Nuget Package” that’s not going to get the job done for my AZUREPROD, so I add Step 2, a “Web Deploy - Publish Website” step and give it all my credentials from Azure. I assign this to only Azure roles and tell it to use the Package step name from Step 1. I added the Web role to my AZUREPROD machine because otherwise it said it would skip Step 1. I create a release and… it fails. It appears to be trying to copy everything to the server that the Tentacle is installed on (BUILD01), which doesn’t have the Web Server role (i.e. no IIS installed). I guess I get that, but is this really what needs to happen? It just seems I’m doing it wrong. I’m sure I’m missing something very obvious.

Any help will be greatly appreciated.

Hi Brett,

Thanks for getting in touch! When using WebDeploy the files themselves need to be in their final state to then be transferred to the final location. So all transforms and substitutions etc have to happen.
That’s why we need a Tentacle to take care of it. There is a great blog post Henrik wrote about WebDeploy and Azure if you want to confirm you are doing it right:

You can however set the IIS Site/App Pool and bindings to only run conditionally via scoped variable. If you see my screenshots (using your own environments for the variable) Octopus will ignore that part of the package deployment when it gets to that environment.

Hope that helps!