TFS2010构建队列有时会有多个InProgress构建,有时不会 - 逻辑是什么?

时间:2012-04-20 17:06:34

标签: tfs tfs2010 tfsbuild

我相当大的项目使用gated构建,具有高度自定义的流程模板(XAML)。由于超出此问题范围的原因,我们的进程只有一个SharedResourceScope,因此多个构建不会并行运行(我知道您应该使用代理范围执行此操作,但我们在中间切换代理,因此包装使用SharedResourceScope的一切。

现在,如果队列中有多个签到,则所有签入都处于“进行中”状态,除了一个以外的所有签入都在SharedResourceScope上等待。这意味着:

  • 人们无法知道哪个版本正在运行
  • 即使我将新排队的签到设置为高优先级,也不能超过所有正在进行并等待SharedResourceScope的人,因此整个优先级设置没什么意义。

我已经尝试过使用DefaultProcessTemplate.XAML,我发现通常只有一个版本正在进行中(虽然偶尔会看到2个版本)。

问题:

  1. 什么时候构建开始,因此进入“进行中”模式?什么阻止所有构建立即启动,并阻止AgentScope / SharedResourceScope?

  2. 我可以在我的XAML中创作一些内容以阻止所有构建进行吗?

2 个答案:

答案 0 :(得分:2)

当构建控制器具有启动新构建的能力时​​,构建开始。由于构建可以使用0到n个代理,因此控制器不会等待在构建开始之前获取代理。控制器根据控制器属性上的“最大并发构建数”设置(代码:MaxConcurrentBuilds)确定其容量。 默认设置:“默认为代理人数”。

XAML无法控制此行为。

另外,TFS2010中有一个关于此问题的修补程序:KB2567437

答案 1 :(得分:0)

使用TFS Build Extensions,您可以通过以下流程管理代理商控制的许多活动:QueryBuildAgentStatusIsBuildRunningSetBuildAgentStatus以列举一些可能的活动对你有用。到目前为止它们还没有完整记录,所以你必须尝试让它们运行。但是包中包含一个有用的帮助文件。

对于“进行中”模式,我注意到即使构建正在等待自由代理,这也是状态;检查这样的构建的日志,你会看到。这非常令人困惑,我希望MS将添加“排队(但未启动)”模式。