在同一台机器上安装多个构建代理是否有利?

时间:2015-05-26 10:14:43

标签: tfs2010 tfsbuild

我们正在使用Team Foundation Build,目前只有一个构建代理。

如果我们在同一台机器上配置第二个构建代理 ,当我们有一个构建队列完成时,这会给我们带来性能优势吗?

请注意,我们使用代理标记,因此我们的所有版本都可以发送给两个代理中的任何一个。

如果构建主要是CPU密集型任务,我很难看到并行构建会有一个显着的优势,因为构建队列的总处理器时间将保持不变,无论哪个代理构建它。

但是,如果在构建期间还存在重要的磁盘活动,那么一个代理可能正在利用可用的CPU周期而另一个代理正在访问磁盘?

an MSDN article提到了不同的构建拓扑,在某些情况下,确实在同一台机器上有多个构建代理。但是,目前尚不清楚这是否仅仅因为代理商有不同的标签。

2 个答案:

答案 0 :(得分:2)

与许多事情一样,答案是“取决于”。

了解我们如何做到这一点:我们在简单构建解决方案的机器上最多有4个构建代理,我们可能会更高,我们也有代理(相同的机器)运行PowerShell脚本来执行各种操作,所以真的相比之下轻量级,并且不会导致运行CI构建的代理出现问题。一个盒子上的几个代理很好(没有强大的功能,双核都是),我没有看到同时运行几个构建的服务器造成的任何真正的负面性能。

但是,对于数据库构建等其他内容,我们在服务器上只有一个代理,否则我们会在构建/部署之前获得锁定以及其他各种恢复问题。

如果您正在最大限度地锁定或锁定任何资源,那么您可能希望每个服务器都坚持使用一个构建代理,但是我会说“试一试”并看到,您可能会发现稍微有点如果你有一个排队的队列,那么构建时间会更长,但它会更快地咀嚼你的构建列表。

答案 1 :(得分:2)

正如丹尼尔已经提到的那样,这取决于,但通常情况下,如果您的代理正在进行普通构建,那么拥有多个代理将允许您并行运行多个构建。执行此操作时,IO和内存限制可能会导致构建服务器出现问题,某些防病毒产品也会出现问题。

如果构建服务器配备了快速本地存储(ram磁盘,物理SSD或虚拟机的物理驱动器优先于构建工作区的SAN存储)并且分配了足够的CPU核心,则可能能够运行很多并行构建。

如果已配置,MsBuild和Team Build都可以分散在多个代理上构建多个解决方案,项目和/或配置的负担,从而大大改善构建解决方案所需的时间。 (只要硬件可以跟上这一点)。

  

除此之外:同样地,当您的硬件无法跟上时,在不同服务器上拥有多个代理允许您将构建扩展(vs扩展)到这些多个代理,从而缩短整体构建时间那样。

特别是当您配置了CI构建并且构建需要的时间超过几分钟时,开发团队拥有多个代理是有益的,这样他们的构建就可以并行运行,并且所有开发人员都能更快地获得反馈。如果你只有一个构建代理,它会导致你的开发人员必须等待彼此完成。

确实存在一些情况,其中多个代理商对您没有任何好处。这些通常是专家案例:

  • 您的构建代理兼作“部署代理”,运行将您的产品安装到服务器本身的脚本。在实验室管理环境中,此类代理是常见的。
  • 您的构建定义需要对共享资源(例如,常见的固定文件目录)的读或写访问权限。多个代理会争夺此问题,并可能导致文件锁定破坏构建。
  • 您的服务器一般资源不足(内存或磁盘IO),无法同时处理多个版本。
  • 您的网络带宽非常低,并行运行多个版本可能会在下载源或将构建结果保存到服务器或文件共享时导致超时和其他问题。大多数这些项目可以通过更多内存,本地存储或更多带宽来解决,并且限制代理数量可能只是暂时的。
  • 当您只有一个构建定义并且它是Gated构建时。在这种情况下,Team Build将始终以串行方式运行构建。如果您有多个具有不同工作空间配置的Gated Build,那么拥有多个代理是有益的。