2016-03-12 50 views
2

我想查詢哪些代理正在使用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? 
} 

回答

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(); 
}