查询运行构建的代理

时间:2016-03-12 01:59:54

标签: c# asp.net-web-api tfs tfs2015

我正在尝试使用TFS Extended Client查询当前正在运行构建的代理。这适用于新的TFS 2015(非XAML)构建系统。

我可以使用下面的代码轻松查询当前正在运行的版本,但我看不到任何方法来访问运行构建的代理的详细信息。 Build类型或任何BuildHttpClient方法的属性都不会显示此内容。

有没有办法实现这个目标?

VssConnection connection = new VssConnection(new Uri("TfsUri"), new VssAadCredential());
var buildClient = connection.GetClient<BuildHttpClient>();               

var builds = await buildClient.GetBuildsAsync(
       statusFilter: BuildStatus.InProgress,
       project:"project"
);

foreach (var build in builds)
{
    var buildNumber = build.BuildNumber;
    var buildQueue = build.Queue;

    //How to query for agent executing build?
}

1 个答案:

答案 0 :(得分:5)

您可以使用构建时间轴记录中包含的 workername属性作为代理的识别机制。

代理商的 工作人员姓名 通常会在添加到队列时与 代理商名称 匹配。

agent name

通过您正在使用的api访问构建的这个细节;我针对已经完成并且正在构建的构建进行了测试,这个细节已经在执行时填充,如果尚未将工作者分配给指定的构建,您可能希望进行其他对象引用有效性检查。

尽管如此,修改后的片段中的foreach循环仍然包含使用构建的时间轴记录查找工作者名称。

foreach (var build in builds)
{
  var buildNumber = build.BuildNumber;
  var buildQueue = build.Queue;

  //How to query for agent executing build? ... Perhaps use the the worker name

  var buildDetail = await buildClient.GetBuildTimelineAsync(build.Project.Id, build.Id);
  var workerName = (string.IsNullOrEmpty(buildDetail.Records.Select(x => x.WorkerName).First())) ? "WORKER NOT INDICATED" : buildDetail.Records.Select(x => x.WorkerName).First();
 }