具有2个代理的TFS构建控制器仅在一个代理上构建

时间:2015-12-08 16:09:06

标签: tfs build tfsbuild

我在一个控制器下设置了两个代理。这是我的设置:

控制器:MachineA AgentA:MachineA AgentB:MachineB

但是,当我对构建进行排队时,构建是顺序的 - 一次构建一个构建。我希望在两个代理上并行构建,这样我们就可以同时构建两个构建。

我正在使用"默认模板"用于构建定义,以及"代理设置"设置如下: "使用代理名称= *且标签为空;最长执行时间:03:00:00;最长等待时间:04:00:00" 两个代理都没有标签。

我应该从哪里开始寻找?我应该提供哪些其他信息?

3 个答案:

答案 0 :(得分:1)

单个排队的构建将构建您告诉它构建的所有项目和解决方案,顺序

拥有多个代理将允许您对多个同步构建进行排队,并使这些构建并行运行。

这样想:

您有一个项目A和项目B的解决方案X. 您有解决方案X的构建定义Z。

如果您有多个构建代理并且您对Z的单个构建进行排队,则将按顺序构建A和B.你的第二个代理人将无所事事。

如果您对Z的两个版本进行排队,则将在两个代理上按顺序构建A和B两次,并行。将使用这两种代理。

MSBuild确实有一些标志来启用并行性,但无论你做什么,它都不会将工作负载分散到多个代理中以进行单个排队构建。

答案 1 :(得分:0)

如果您升级到TFS 2015并使用vNext构建系统,您可以进行并行构建,它有多个代理和多个配置。

假设你有一个带有2个配置的构建(anycpu-debug和anycpu-release),你有2个代理,2个构建配置将并行运行。

每个代理都必须下载源代码并单独解析它,因此如果您在单个(多核)构建服务器上运行2个代理,则网络和磁盘子系统可能会限制您。我刚刚开始使用它(只有少量版本用于小型项目)而且我的版本在单个构建服务器上运行2个代理程序的时间缩短约33%。

答案 2 :(得分:0)

我不认为这完全回答了这个问题。 例如,我们已经设置了一个验证(a.k.a.Gated)构建,该构建在服务器目录结构的更改时触发。 如果两个同事提交了搁置集,则会安排两个验证构建(使用相同的构建定义)。 但是,这些构建由一个构建代理按顺序处理,即使其他两个代理处于空闲状态。 最重要的事情:如果我禁用活动的构建代理并触发另一个验证构建,那么TFS很乐意选择一个之前处于空闲状态的构建代理。 似乎TFS更喜欢按顺序处理预定的构建,以避免在不同的构建代理上创建(几乎)相同的工作区的副本。但这几乎违背了拥有多个构建代理的目的。