如何确定构建是否已排队但未在TFS2010 API中启动?

时间:2010-11-03 11:02:56

标签: c# tfs build tfs2010

我为每个使用枚举Microsoft.TeamFoundation.Build.Client.BuildStatus,它对包含在其中的状态非常有用。

但有一种明显的方法可以确定构建是否已排队,但尚未进行中?我知道visual studio中的build explorer可以看到这个,我在编程时获取数据时遇到了问题。

我是否必须检查teamproject而不是IBuildDetail本身?任何提示赞赏。

3 个答案:

答案 0 :(得分:3)

不幸的是,IBuildDetailSpec查询似乎没有返回排队的构建。但是,您可以使用IQueuedBuildSpec接口查询排队的构建。

例如:

public IEnumerable<IQueuedBuild> getQueuedBuilds(TfsTeamProjectCollection tfsCollection, string teamProject)
{
    // Get instance of build server service from TFS
    IBuildServer buildServer = tfsCollection.GetService<IBuildServer>();

    // Set up query
    IQueuedBuildSpec spec = buildServer.CreateBuildQueueSpec(teamProject);
    spec.Status = QueueStatus.Queued;

    // Execute query
    IQueuedBuildQueryResult result = buildServer.QueryQueuedBuilds(spec);

    // Array of queued builds will be in the result.QueuedBuilds property
    return result.QueuedBuilds;
}

答案 1 :(得分:0)

一旦构建实际到达队列,您应该能够将构建状态视为BuildStatus.NotStarted。但是,有一段时间它到达队列之前它确实没有状态。

如果您以编程方式提交构建,则可以执行以下操作:

bool success = queue.WaitForBuildStart(pollingIntervalInMilliseconds, timeOutInMilliseconds);

只要代理正在监听,这实际上应该很快就会返回。如果您的网络速度较慢,那么握手可能需要几秒钟。

一旦通过WaitForBuildStart,状态将设置为BuildStatus.NotStarted,直到它移至InProgress并且其余部分向下移动。

答案 2 :(得分:0)

@Greg Case 首先感谢您的代码,您给了我正在搜索的解决方案。其次,我想建议使用您的相同代码片段从TFS接收特定Queued构建的通知。我已经用它来通知我排队的构建完成了它甚至返回了失败案例的异常细节。要做到这一点,你需要connect()到从代码返回的排队构建,然后注册事件,我想将其添加为注释,但不能用于长文本

IQueuedBuild CurrentBuild =  result.QueuedBuilds.First();
CurrentBuild.Connect(); 
CurrentBuild.PollingCompleted += CurrentBuild_PollingCompleted;