TFS2010和懒惰的构建代理

时间:2012-02-17 07:53:21

标签: tfs2010 build-server build-agent

我们有一个TFS2010设置,一个控制器和两个代理在同一个构建机器上运行。昨天,构建服务器停止运行2个并发构建,只让一个代理完成工作。我试图重启控制器和代理,但没有锁定。没有模式,两个代理都在工作 - 一次只有一个。我今天添加了一个新代理(同一台机器),它现在可以获得2个并发版本 - 仍然有一个懒惰代理。有什么想法吗?

新信息: 当我有两个正在运行的构建和队列中的一对(NB总共有3个代理)并且我将优先级更改为高 - 它开始构建在最后一个代理上!?

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

您可以检查一些事项:

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

答案 2 :(得分: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来临时解决问题。更新此列后,任何在更新后排队的新版本都可以使用之前“懒惰”的代理。

帕特里克