Quickly deploying to large number of applications in one go

My IIS web site has 24 applications, all using the same single app pool. We build one package per application. During a deployment, all 24 packages are deployed to their respective applications. This uses the “Deploy to IIS” template. So each deployment means running through 24 steps, one for each application / package.

Problem is that this takes a long time (6 minutes). During that time, the web site is down for end users. I want to reduce this to ideally less than 30 seconds to reduce disruption for end users. Only deploying updated packages is too complicated and error prone.

  1. Is there a template that lets me deploy to all applications in one single step?

  2. Is the code for the “Deploy to IIS” template open source? If so, where can I find it? So I could create a new custom step based on your code.

  3. Another option is to write my own step that simply updates the Physical Path of each IIS Application to the directory where Octopus Deploy has extracted its package. Which Octopus system variables would I use to figure out the location of that directory?

Good morning @mperdeck,

Thank you for contacting Octopus Support and sorry to hear you are having long wait times for your IIS Project. I am not sure if you will be able to accomplish what you are trying to do here.

IIS will not deploy applications to the same server in parallel even if you set the Bypass Mutex variable up in Octopus on that project.

IIS will deploy one application, wait for it to deploy then deploy the next. There is no official IIS documentation on this but we have a (long) forum post here where a user was having the same issues deploying over 10 IIS applications to the same server.

Long story short it would work fine if you deployed less than 10 (it would take awhile to do that) but then it would get stuck if you deployed more than that. If you restarted the server it would then deploy the rest. This is because IIS will wait for each application to deploy. The only way we fixed that was to have him deploy less than 10 applications.

This is not an Octopus limitation unfortunately so we cannot do anything about that. It looks like your applications are updating fine which is good. I assume you are seeing lines such as this in your task logs:

Cannot start this IIS website related task yet. There is already another task running that cannot be run in conjunction with any other task. Please wait…

If so then this is the reason for the slowness. If you are not seeing those messages in your task logs do you have the bypass mutex variable setup on your project as this might help reduce the speed of your applications deploying, IIS would still wait for each application to finish updating before it goes onto the next but it may improve the speed of the deployments by a few seconds.

Let me know if you are seeing those messages in the logs and if you already have the Mutex variable setup.

Kind Regards,

Clare

Hi @clare.martin,
Not sure why I got this reply?

Kind regards,
Micheál Power

Hey @mikepower79,

I am not sure either, the only thing I can think is that I had two tabs open, one for your ticket and one for this one and Discourd got mixed up?

Either way I apologise, you should not have been notified of this!

Kind Regards,

Clare

1 Like

Hi @clare.martin

Thanks for your response.

I think the other thread is not quite related to what I’m trying to do here. I simply want to update the Physical Paths of our IIS Applications to point at the package directories extracted by Octopus Deploy. Wrote some Powershell to set those Physical Paths on a dev machine (not using Octopus Deploy), and that works fine without delays. I’ll try that approach next.

When Octopus Deploy does a deployment, it extracts the packages into separate directories (one per package) on the target server.

Which Octopus system variables would I use to figure out the file system paths of those directories?

Matt Perdeck

Hi @mperdeck
Just stepping in for Clare who is offline as part of our UK team.

I believe the Octopus variable you might be looking for would be:

$OctopusParameters[“Octopus.Action.Package[ReferencePackage].ExtractedPath”]

Either way, one of the easy ways to find Octopus variables is to create a Project Step with a Script so you can navigate here and do a search:

image

Hopefully this will show you which output variable you need.
If you need more help, just reach out and we can try and get you what you need.

Kind regards,
Paraic

This topic was automatically closed 31 days after the last reply. New replies are no longer allowed.