Octopus Deploy – Run Multiple Processes steps on a Tentacle Simultaneously and Parallel

Spread the Knowledge

For each step that you define in you deployment processes, you can set conditions for greater control over the step’s execution. You can set conditions to:

  • Run the step on specific environments or skip specific environments.
  • Specify which channels the step should run on.
  • Limit when the step runs based on the status of a previous step.
  • Run steps in parallel with a previous step.
  • Specify whether the step runs before or after package acquisition.
  • Make the step a required step that cannot be skipped.

In this post, I am discussing about “Run steps in parallel with a previous step.” using “Start Trigger” If you have more than one step in your deployment process, the Start Trigger option lets you choose between:

Running steps in parallel.
Wait for the previous step to complete, then start.
When you review a process with two steps that run in parallel, you’ll notice two arrows linking the steps that run in parallel.

By default, Octopus will only run one process on each target at a time, queuing the rest. There may be reasons that you need to run multiple, and that’s okay we have a setting for that! Unfortunately running these scripts in parallel as child steps will not work. If your steps are not child steps you are able to set your steps to trigger at the same 30 time instead of sequentially.

OctopusBypassDeploymentMutex must be set at the project variable stage. It will allow for multiple processes to run at once on the target. Having said that, deployments of the same project to the same environment (and, if applicable, the same tenant) are not able to be run in parallel even when using this variable.

Multiple projects
If you require multiple steps to run on a target, by multiple Projects in parallel, you need to add this variable to ALL of your projects.

Caution
When this variable is enabled, Octopus will be able to run multiple deployments simultaneously on the same machine. This can cause deployments to fail if the same file is modified more than once at the same time.

If you use OctopusBypassDeploymentMutex, make sure that your projects will not conflict with each other on the same machine.

Max Parallelism
When enabling OctopusBypassDeploymentMutex there are a couple of special variables that may impact the number of parallel tasks that are run.

Octopus.Acquire.MaxParallelism:
This variable limits the number of package acquisitions that can run simultaneously on the Tentacle.
By default, this is set to 10.
Octopus.Action.MaxParallelism:
This variable limits the maximum number of machines on which the action will concurrently execute.
By default, this is set to 10.

Case
Given five projects with the OctopusBypassDeploymentMutex set as True, True, False, True and True respectively. Then assuming they are started in that order, the first two will run in parallel, but the third will wait until they have finished. The last two will then also be blocked until project three completes at which point they both will run in parallel.