如何使用VSTS发布流程跨多台服务器并行部署分布式系统

How to deploy a distributed system across multiple servers in parallel using VSTS release process

这是我的场景,我在 Visual Studio 在线有一个任务组列表,它接收 MachineName(目标服务器)的参数:

Task1
Task2
Task3
Task4

还有一组服务器:

SVR1
SVR2
SVR3
SVR4

目前,我有一个有效的部署管道(全部在同一个代理上使用 [None] 并行选项):

Task1(SVR1)
Task1(SVR2)
Task1(SVR3)
Task1(SVR4)

Task2(SVR1)
Task2(SVR2)
Task2(SVR3)
Task2(SVR4)
etc...

这些任务必须按特定顺序执行,并且在所有服务器都收到上一个任务之前,任何服务器都不应启动任何任务。然而,当前的部署过程不是特别可扩展的。每次我们添加一个额外的节点时,部署时间都会增加大约 1 分 20 秒。

我想做的是:

Execute Task1 on all servers (Wait until all are complete)
Execute Task2 on all servers (Wait until all are complete)
Execute Task3 on all servers (Wait until all are complete)
etc.. you get the picture.

我目前在网上找不到正是我需要的示例,而且我在使用 VSTS 并行部署方面经验不多。

有没有简单的方法可以做到这一点?我需要 运行 多个代理才能使它工作,还是可以 运行 在同一个代理上执行多个并行任务?

提前致谢

由于您只有一个管道,任务将按顺序执行,而不是同时执行。

如果你想在不同的服务器之间并发部署一个任务,你应该购买额外的管道。

您可以为每个任务组(任务 1、任务 2 等)添加多个代理阶段:

  1. 添加一个变量来存储服务器(例如名称:servers;值:SVR1,SVR2,SVR3,SVR4
  2. 为每个任务组(任务 1、任务 2 等)添加多个代理阶段
  3. 为每个代理阶段配置执行计划(select一个阶段>选中Multi-configuration选项>在Multipliers输入框中指定servers(step1变量)
  4. 然后你可以从任务中的servers变量中得到一个服务器

另一方面,您可以在同一台机器和池中配置多个代理,然后在每个阶段的最大代理数输入框中指定代理数以减少build/release时间。