我的相当大的项目使用门控构建,并带有高度定制的流程模板(XAML)。由于超出此问题范围的原因,我们的进程有一个 SharedResourceScope,因此多个构建不会并行运行(我知道您应该使用代理范围来执行此操作,但我们在中间切换代理,因此将一切都与 SharedResourceScope 相关)。
现在,如果队列中存在多个 checkin ,则所有 checkin 都会进入“进行中”状态,并且除一个之外的所有 checkin 都会等待 SharedResourceScope。这意味着:
- 人们无法知道哪个构建正在实际运行
- 即使我将新的排队 checkin 设置为高优先级,它也无法超越所有正在处理并等待 SharedResourceScope 的 checkin ,因此整个优先级设置没有什么意义。
我尝试过使用 DefaultProcessTemplate.XAML,并且发现通常只有一个构建正在进行(尽管偶尔我会看到 2 个构建)。
问题:
构建何时开始并因此进入“进行中”模式?是什么阻止所有构建立即启动并在 AgentScope/SharedResourceScope 上阻塞?
我可以在 XAML 中编写一些内容来阻止所有构建继续进行吗?
最佳答案
当构建 Controller 有能力启动新构建时,构建就会开始。由于构建可以使用 0 到 n 个代理,因此 Controller 不会在构建开始之前等待获取代理。 Controller 根据 Controller 属性上的“最大并发构建数”设置确定其容量(在代码中:MaxConcurrentBuilds
)。
默认设置:“默认代理数量”。
XAML 中无法控制此行为。
此外,TFS2010 中存在与此相关的错误,修补程序:KB2567437
关于TFS2010 构建队列有时有多个 InProgress 构建,有时没有 - 逻辑是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10250518/