我正在尝试使用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?
}
答案 0 :(得分:5)
您可以使用构建时间轴记录中包含的 workername属性作为代理的识别机制。
代理商的 工作人员姓名 通常会在添加到队列时与 代理商名称 匹配。
通过您正在使用的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();
}