Steps in Octopus project

Hello

I have problem with create proper project.

I have two servers "server07’ and “server 08”. I created one project with about 25 steps (powershell script).
The problem is that i have first step execute on “server 07” and 08 and then i have next 4 steps executed only on “server07” and then fifth steps is on both servers. The question is how setup second server to wait for this 4 steps executing on “server07” and execute step fifth with the same time on both servers.

Now i have something like this
server07 server08
step 1 step1
step 2 step5
step 3
step 4
step 5

But i want to achieve this

server07 server08
step 1 step1
step 2 wait
step 3 wait
step 4 wait
step 5 step5

Is there any options ?

Best Regards
Rafal Polak

Hi Rafal,

Thanks for getting in touch.

Machine roles and conditions will help you deal with this situation. You can tag your server07 and server08 under different roles and target them specifically in individual deployment steps, then make sure your common step properties are set to only run when previous steps are successful (please see this “Common step properties” section and screenshots for an example). This way, step 5 will only run when step 4 has completed.

Hope this helps.

Cheers
Mark

Hi Mark,

Thanks for your response.

I changed settings as you proposed.
Unfortunately, this didn’t help.

I attached files to show full situation.
On the “envs” picture i have all machine with assigned roles to each machine. Role acceptance is for every machine. Next in “proj1” i have my project with steps and in steps 2,3,4 in “Start trigger” i choose “Wait for the previous step…”.
After create release and deploy, step 2 run on server10 on time 11:19:43 and end on 11:19:44, then should wait for step 3 on server 07 which start on 11:20:39 and end 11:23:57. Next should trigger step 4 from server10 but it didn’t happen. Step 4 is run after step 2 on 11:19:45.

You can see this situation on pictures “server07” and “server10”

Best regards
Rafal Polak

Hi Rafal,

Thanks for the additional information.

If I’m understanding this correctly, I think you may be able to simplify your setup and minimise on the problems you are seeing.

For example, you could have a single environment called “Acceptance” and add all of your servers to that single environment. Then you can just deploy to all of your servers in the Acceptance environment (removing the need for the “acceptance” role).

Eg. see acceptance-environment.png attached

You can then tag each of your servers with a “web-server” role as well as a role that helps you identify that particular server. Eg. Server 07 would have two roles: “web-server” and “server07”.

You can then reduce your steps to have a single “Turn off load balancer” and “Turn on load balancer” step that targets the roles of the individual machines. Eg. “Turn off load balancer” scoped to “server09” and “server10”. You should not need child steps for what you are trying to accomplish.

Eg. deployment-process.png attached

I setup a test project (with steps that have a simple PowerShell sleep command for 2 seconds) and each step runs as expected, one after the other. Is this what you would expect?

  • Step 1 runs across all web-servers,
  • Step 2 turns off the load balancer on server09 and server10,
  • Step 3 installs apps on server07,
  • Step 4 turns on the load balancer on server09 and server10.

Eg. task-log.png attached

You also need to be careful when assigning roles. From your first screenshot (envs.png) I can see roles “server07-role”, but in your deployment process I see roles like “server07”. These are not the same role.

Hope this helps

Cheers
Mark Siedle

Hi Mark

Thank you very much for your advices about configuration, it works perfect !!!

Finally, I’m seeing how it should look :slight_smile:

Best regards
Rafal Polak

Hi Rafal,

No worries :slight_smile: Glad it’s all up and running for you.

Cheers
Mark Siedle