Deploy to single server with shared role

First, just got started with Octopus Deploy and, so far, this is fantastic. I am shocked that an OTS product solves so many of our problems so quickly. You put a lot of time into requirements. Great job.

So, my question.

We have a small environment:
Dev/Test: 2 web servers; 1 batch server; 1 SQL Server
QA: 1 web server (more to come); 1 batch server; 1 SQL Server
Prod: 2 web servers; 2 batch servers; 3 SQL Servers

Having said that, NONE of this is load balanced. So Web Server A and Web Server B in our prod environment have two totally different sets of sites on them.

In theory the role for all my web servers is “Web.” However, during the Deploy step of my process, I can only specify roles, not servers (as far as I’ve seen). If I pick “Web” then my application is deployed to both Web Server A and Web Server B. I could probably solve that my creating distinct roles (Web-1 and Web-2) and assign both roles to my single QA web server – but that only solves half the problem because we are planning on getting more QA servers and we have multiple dev servers.

Let’s say I have this scenario (see attached image).

If I give servers A, C, and D the “Web-1” role and servers B, D, and F the “Web-2” role, it’s fine for Project Superman. Everything will be deployed where I need to. But that doesn’t work Batman or Luke Cage. If I choose “Web-1” for deploy, QA will be deployed to the wrong server for Batman. Etc.

It seems like you’re locked into a 1:1 role/server between environments.

Am I missing something?



Hi Tom,

Thanks for getting in touch! Because your situation is quite small scale, the idea of machines makes sense, and defining different roles seems to do the same thing. But roles make much more sense when you think of environments with 100 machines. You wouldn’t want to scope to machines, that would take lots more effort. Machines can also have multiple roles so it’s not 1:1.

You just happen to have a pretty mixed up scenario. Is there any reason why Batman can’t find his way to the web-1 QA environment? Realigning like this when automating can seem a bit of effort, but will make your future self so much happier.

Otherwise I would suggest multiple QA environments and have a different Lifecycle for each project to match. So setup Dev with A as web-1, and B as web-2 then QA1 C as web-1 and QA2 D with web-1,web-2 , and Prod with E as web-1 and F as web-2.
That means Superman runs on web-1 with Dev, QA1 and Prod, Batman gets web-1 with Dev QA2 and Prod, and Luke Cage gets web-2 with Dev, QA2 and Prod. (See how Batman and Luke Cage get the same Lifecycle.)

I mean it isn’t the worst server naming ;), I had a boss who thought naming servers after kids cartoons was fun. FTPing to Spongebob was interesting.
Hope that helps!

Great suggestion. I was able to set up 3 different lifecycles, which correspond with the possible combinations of dev -> qa -> prod servers we have. And since some of these pseudo-dev and pseduo-qa environments “share” a server (e.g. there are two web servers with different projects/apps, but only one batch server), I figured out I was able to assign them to multiple environments. Nice!

Thanks for your help.