我们有一个 TFS2010 设置,其中一个控制器和 2 个代理在同一台构建机器上运行。昨天构建服务器停止运行 2 个并发构建,只让一个代理完成工作。我试图重新启动控制器和代理,但没有锁定。没有模式,两个特工都在工作——一次只有一个。我今天添加了一个新代理(同一台机器),它现在可以获取 2 个并发构建 - 仍然有一个惰性代理。有什么想法吗?
新信息:当我有 2 个正在运行的构建和几个在队列中(NB 总共有 3 个代理)并且我将优先级更改为高时 - 它开始在最后一个代理上构建!?
我们有一个 TFS2010 设置,其中一个控制器和 2 个代理在同一台构建机器上运行。昨天构建服务器停止运行 2 个并发构建,只让一个代理完成工作。我试图重新启动控制器和代理,但没有锁定。没有模式,两个特工都在工作——一次只有一个。我今天添加了一个新代理(同一台机器),它现在可以获取 2 个并发构建 - 仍然有一个惰性代理。有什么想法吗?
新信息:当我有 2 个正在运行的构建和几个在队列中(NB 总共有 3 个代理)并且我将优先级更改为高时 - 它开始在最后一个代理上构建!?
好的 - 所以 TFS 数据库中 tbl_BuildQueue 中的无效条目是原因。 正常优先级构建不会在 TFS 2010 中构建
快速修复是删除 tbl_BuildQueue 中具有不存在的 DefinitionId 的条目。
SELECT * FROM [Tfs_Default].[dbo].[tbl_BuildQueue] where DefinitionId not in (select DefinitionId from tbl_BuildDefinition)
您可以检查以下几点:
我们目前正在与客户合作解决一个问题,该问题可能会使代理孤立于不再运行的构建。这是由于存储过程中的竞争条件而发生的,与缺少外键关系无关。
如果您想验证这确实发生了,请在您的项目集合数据库上运行以下查询:
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 来临时解决问题。更新此列后,任何在更新后排队的新构建都将能够使用您之前所说的“懒惰”的代理。
帕特里克