2

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

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

  • 人们无法知道实际运行的是哪个构建
  • 即使我将一个新的排队签到设置为高优先级,它也无法超过所有正在进行和等待 SharedResourceScope 的人,因此整个优先级设置没有什么意义。

我已经尝试使用 DefaultProcessTemplate.XAML,并且我发现通常只有一个构建正在进行中(尽管偶尔我会看到 2 个构建)。

问题:

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

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

4

2 回答 2

2

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

XAML 中无法控制此行为。

此外,TFS2010 中有一个关于此的错误,修补程序:KB2567437

于 2012-05-01T11:05:48.280 回答
0

使用TFS Build Extensions,您可以获得许多活动,您可以通过这些活动管理代理控制:QueryBuildAgentStatusIsBuildRunningSetBuildAgentStatus仅举几例对您有用的。到目前为止,它们还没有被记录在案,所以你必须尝试让它们运行。但是软件包中包含一个有用的帮助文件。

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

于 2012-04-24T12:10:27.127 回答