2012-02-17 31 views
0

我们有一个TFS2010安装程序,其中包含一个控制器和两个在同一个构建机器上运行的代理。昨天构建服务器停止运行2个并发构建,只让一个代理完成这项工作。我试图重新启动控制器和代理,但没有锁定。没有任何模式,两个代理都在做着工作 - 一次只有一个。我今天添加了一个新代理(同一台机器),现在可以选择2个并发版本 - 仍然有一个懒惰代理。有什么想法吗?TFS2010和懒惰的构建代理

新信息: 当我有2个正在运行的版本和一对队列(总共有3个代理)时,我将优先级改为高 - 它开始建立最后一个代理!?

回答

2

好的 - 所以在TFS数据库tbl_BuildQueue中的一个无效条目是原因。 Normal Priority Builds Will Not Build in TFS 2010

快速修复是删除tbl_BuildQueue中具有不存在的DefinitionId的条目。

SELECT * FROM [Tfs_Default].[dbo].[tbl_BuildQueue] where DefinitionId not in (select DefinitionId from tbl_BuildDefinition) 
0

有一些事情你可以检查:

  • 是否有任何配置为使用代理的标签或代理机构名称内置的过滤器定义的?
  • 是否使用标签配置了任何代理?您可以检查TF管理控制台。
  • 使用Visual Studio中的“构建” - >“管理构建控制器...”来检查每个代理的状态。
  • 使用代理上的TF管理控制台检查每个代理的状态。
  • TF Admin Console是否在过去24小时内报告过任何事件?
+0

生成未配置为使用标记,并且没有任何代理具有任何标记。控制器和代理的状态看起来很好 - 控制器的并发构建数设置为已注册代理的数量。只有日志中的事件是重新启动事件(控制器和代理) – jaspernygaard 2012-02-17 09:42:43

0

目前,我们正在与客户合作解决的问题,可以给孤儿来构建其不再运行代理。这是由于存储过程中的竞争条件造成的,并且与丢失的外键关系无关。

如果您想验证这实际上已经发生,您的项目收集数据库运行下面的查询:

SELECT * 
    FROM tbl_BuildAgent ba 
    LEFT JOIN tbl_BuildAgentReservation bar 
    ON  bar.ReservationId = ba.ReservationId 
    WHERE ba.ReservationId IS NOT NULL 
      AND bar.ReservationId IS NULL 

如果返回任何行,你可以暂时通过设置修复该问题“ ReservationId'将受影响的构建代理列回到NULL。更新此列后,任何在更新后排队的新版本都可以使用之前“懒惰”的代理。

Patrick Patrick

+0

感谢您的详细阐述。我会在星期一进行验证。 – jaspernygaard 2012-02-19 00:31:44

+0

帕特里克,我已经试过你的脚本,但没有该状态的条目。难道不是这样吗? – jaspernygaard 2012-02-20 07:32:28