【问题标题】:TFS Build controller with 2 agents only builds on one agent具有 2 个代理的 TFS 构建控制器仅在一个代理上构建
【发布时间】:2016-03-13 15:37:17
【问题描述】:

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

控制器:MachineA 代理A:机器A 代理B:机器B

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

我使用“默认模板”进行构建定义,“代理设置”设置如下: “使用 Name=* 且标签为空的代理;最大执行时间:03:00:00;最大等待时间:04:00:00” 两个代理上都没有标签。

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

【问题讨论】:

  • 这里是 MsBuild 参数:/p:TeamBuild=True /t:Build /t:Publish /p:SqlPublishProfilePath="MyProfilePath" /p:VisualStudioVersion="12.0"
  • 不支持。如果有两个代理,TFS 无法判断使用哪个代理,除非您为代理添加标签。

标签: tfs build tfsbuild


【解决方案1】:

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

拥有多个代理可以让您将多个同时构建排队并让这些构建并行运行。

这样想:

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

如果您有多个构建代理并且您将 Z 的单个构建排入队列,则 A 和 B 将按顺序构建。您的第二个代理将处于空闲状态。

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

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

【讨论】:

    【解决方案2】:

    我认为这并不能完全回答这个问题。 例如,我们已经建立了一个验证(又名门控)构建,它会触发对服务器目录结构的更改。 如果两个同事提交搁置集,则安排两个验证构建(使用相同的构建定义)。 但是,这些构建由一个构建代理按顺序处理,即使另外两个代理处于空闲状态。 最重要的是:如果我禁用活动的构建代理并触发另一个验证构建,那么 TFS 会很高兴地选择一个之前空闲的构建代理。 TFS 似乎更喜欢按顺序处理计划的构建,以避免在不同的构建代理上创建(几乎)相同的工作空间的副本。但这几乎违背了拥有多个构建代理的目的。

    【讨论】:

      【解决方案3】:

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

      假设您有一个包含 2 个配置(anycpu-debug 和 anycpu-release)的构建,并且您有 2 个代理,这两个构建配置将并行运行。

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

      【讨论】:

      • 但这基本上仍然是两个独立的构建。是将相同的源代码编译成两组二进制文件,而不是将一组源代码并行编译成一组二进制文件。
      • MS 在构建配置中将其称为并行。但是,是的,同一构建的 2 种或更多不同配置会创建 2 组或更多不同的二进制文件集。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-10
      • 2018-11-16
      相关资源
      最近更新 更多