0

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

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

4

3 回答 3

2

好的 - 所以 TFS 数据库中 tbl_BuildQueue 中的无效条目是原因。 正常优先级构建不会在 TFS 2010 中构建

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

SELECT * FROM [Tfs_Default].[dbo].[tbl_BuildQueue] where DefinitionId not in (select DefinitionId from tbl_BuildDefinition)
于 2012-02-17T10:09:57.270 回答
0

您可以检查以下几点:

  • 是否有任何构建定义配置为使用代理标记或代理名称过滤器?
  • 是否有任何代理配置了标签?您可以在 TF 管理控制台中查看。
  • 使用 Visual Studio 中的“构建”->“管理构建控制器...”检查每个代理的状态。
  • 使用代理上的 TF 管理控制台检查每个代理的状态。
  • TF 管理控制台是否在过去 24 小时内报告任何事件?
于 2012-02-17T09:22:08.073 回答
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 来临时解决问题。更新此列后,任何在更新后排队的新构建都将能够使用您之前所说的“懒惰”的代理。

帕特里克

于 2012-02-17T14:14:40.160 回答