How can I do a rolling deployment across multiple webfarms?

I use four different data centers, each with five servers, and all of those servers have the same Octopus Deploy role.

I want to use a rolling deployment for the machines inside the data center (batch size of 3 so it’ll do servers A, B, C, then D and E), but I’d really like Octopus to deploy out to all of the data centers in parallel (all data centers would have rolling deployments running for their servers at the same time).

Is this possible? If not, can you suggest a way I can get closest to this?

Hi Eli, we don’t support this out of the box right now. I’m drawing a blank on options that will get you close, but if I think of anything I’ll post here.


Are the Tentacle machines in some sort order as they’re batched together? Maybe by machine name?

I believe they’re ordered by name (nice idea!) but can’t absolutely guarantee it.

After a quick test, it appears that they are not sorted by name. So, here’s my user story:

As a user of Octopus Deploy, I want a step to do a rolling release for machines in a cluster and deploy in parallel to multiple clusters.

One way I might be able to fake this is if you added a reliable sorting scheme for machines in a rolling release. Just sorting by Machine.Name may be helpful. I’d prefer if you could let me define a variable like “SortOrder” and then I’d set the value per machine. I know the timings could get out of sync a bit, but I think that’d do the trick.

I’ve created for the general feature.

Sorting isn’t as simple as it first appears, I’ll come back to this when I get a moment and see what might be done.

Is your overall goal to achieve faster deployment times?


Yes, that’s the primary driver of this request.

I’ve created a workaround for this by adding a Powershell script step which just sleeps for a set period of time for half the machines in the cluster. It should get me by.

I’d still love to have first-class support for multiple clusters. Maybe that just means letting me decide what should run in serial and what should run in parallel.

Thanks for posting the workaround. Agreed it would be great to support this natively.


By the way, if we could support choosing multiple environments per deployment, and ran those in parallel, would that get us closer? I.e. each data centre would be a separate environment, but deployed in one task. Would that cause other complications for you?

Hmm… I’m not sure how that would impact me.

Well, here’s my architecture for you to ponder:
One web application handles static files and feeds the CDN. It needs to be deployed by itself. There’s also a step in there that upgrades the database scheme if needed. This needs to be deployed before everything else. (1 cluster of 4 servers, rolling deployment across these servers)

Then there’s a bunch of other web applications which are deployed out to server clusters. I’d like these to all be in parallel.
Web app A (1 cluster, 12 servers, rolling)
Web app B (2 clusters, 3 servers each, rolling)
Web app C (1 clusters, 2 servers, rolling)
Web app D (1 clusters, 2 servers, rolling)
Web app E (4 clusters, 5 servers each, rolling)
Web app F (1 cluster, 1 server)

I want deploys to run as fast as possible.

Thanks for the extra info - will give it some more thought.