TFS Build controller with 2 agents only builds on a agent
TFS Build controller with 2 agents only builds on one agent
我在一个控制器下设置了两个代理。这是我的设置:
控制器:MachineA
代理A:机器A
代理 B:机器 B
但是,当我对构建进行排队时,构建是顺序的 - 一次构建一个构建。我希望在两个代理上并行构建,以便我们可以同时构建两个构建。
我正在使用 "default Template" 进行构建定义,"Agent Settings" 设置如下:
"Use agent where Name=* and Tags is empty; Max Execution Time: 03:00:00; Max Wait Time: 04:00:00"
两个代理上都没有标签。
我应该从哪里开始寻找?我还应该提供哪些其他信息?
单个排队生成将生成您告诉它要生成的所有项目和解决方案,按顺序。
拥有多个代理可以让您对多个同时构建进行排队,并让这些构建 运行 并行进行。
可以这样想:
您有一个包含项目 A 和项目 B 的解决方案 X。
您有解决方案 X 的构建定义 Z。
如果您有多个构建代理,并且将 Z 的单个构建排队,A 和 B 将按顺序构建。您的第二个代理将处于空闲状态。
如果您对 Z 的两个构建进行排队,A 和 B 将在两个代理之间按顺序构建两次,并行。将使用两种代理。
MSBuild 确实有一些启用并行性的标志,但无论您做什么,它都不会将工作负载分散到单个排队构建的多个代理中。
如果您升级到 TFS 2015 并使用 vNext 构建系统,您可以进行并行构建,如果您有多个代理和多个配置。
假设您的构建设置了 2 个配置(anycpu-debug 和 anycpu-release)并且您有 2 个代理,这 2 个构建配置将 运行 并行。
每个代理都必须下载源代码并单独解析,因此如果您 运行在单个(多核)构建服务器上安装 2 个代理,网络和磁盘子系统可能会受到限制你。我刚刚开始使用它(只有一些小型项目的构建)并且我的构建缩短了大约 33% 运行在单个构建服务器上的 2 个代理上。
我认为这并不能完全回答问题。
例如,我们设置了一个验证 (a.k.a.Gated) 构建,它会在服务器目录结构发生更改时触发。
如果两个同事提交了一个搁置集,那么将安排两个验证构建(使用相同的构建定义)。
但是,这些构建由一个构建代理顺序处理,即使另外两个代理处于空闲状态也是如此。
最重要的是:如果我禁用活动构建代理并触发另一个验证构建,那么 TFS 会愉快地选择之前空闲的构建代理之一。
似乎 TFS 更喜欢按顺序处理计划的构建,以避免在不同的构建代理上创建(几乎)相同工作区的副本。但这几乎违背了拥有多个构建代理的目的。
我在一个控制器下设置了两个代理。这是我的设置:
控制器:MachineA 代理A:机器A 代理 B:机器 B
但是,当我对构建进行排队时,构建是顺序的 - 一次构建一个构建。我希望在两个代理上并行构建,以便我们可以同时构建两个构建。
我正在使用 "default Template" 进行构建定义,"Agent Settings" 设置如下: "Use agent where Name=* and Tags is empty; Max Execution Time: 03:00:00; Max Wait Time: 04:00:00" 两个代理上都没有标签。
我应该从哪里开始寻找?我还应该提供哪些其他信息?
单个排队生成将生成您告诉它要生成的所有项目和解决方案,按顺序。
拥有多个代理可以让您对多个同时构建进行排队,并让这些构建 运行 并行进行。
可以这样想:
您有一个包含项目 A 和项目 B 的解决方案 X。 您有解决方案 X 的构建定义 Z。
如果您有多个构建代理,并且将 Z 的单个构建排队,A 和 B 将按顺序构建。您的第二个代理将处于空闲状态。
如果您对 Z 的两个构建进行排队,A 和 B 将在两个代理之间按顺序构建两次,并行。将使用两种代理。
MSBuild 确实有一些启用并行性的标志,但无论您做什么,它都不会将工作负载分散到单个排队构建的多个代理中。
如果您升级到 TFS 2015 并使用 vNext 构建系统,您可以进行并行构建,如果您有多个代理和多个配置。
假设您的构建设置了 2 个配置(anycpu-debug 和 anycpu-release)并且您有 2 个代理,这 2 个构建配置将 运行 并行。
每个代理都必须下载源代码并单独解析,因此如果您 运行在单个(多核)构建服务器上安装 2 个代理,网络和磁盘子系统可能会受到限制你。我刚刚开始使用它(只有一些小型项目的构建)并且我的构建缩短了大约 33% 运行在单个构建服务器上的 2 个代理上。
我认为这并不能完全回答问题。 例如,我们设置了一个验证 (a.k.a.Gated) 构建,它会在服务器目录结构发生更改时触发。 如果两个同事提交了一个搁置集,那么将安排两个验证构建(使用相同的构建定义)。 但是,这些构建由一个构建代理顺序处理,即使另外两个代理处于空闲状态也是如此。 最重要的是:如果我禁用活动构建代理并触发另一个验证构建,那么 TFS 会愉快地选择之前空闲的构建代理之一。 似乎 TFS 更喜欢按顺序处理计划的构建,以避免在不同的构建代理上创建(几乎)相同工作区的副本。但这几乎违背了拥有多个构建代理的目的。