如何确定给定构建在 TFS 中使用哪个构建代理?

How can I determine which build agent a given build uses in TFS?

我有以下总体上非常有用的查询,但我似乎无法确定我的构建使用了哪个构建代理。 注意: - 这是基于 @Patrick-MSFT 提供的出色帮助的工作代码。

TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("***"));
IBuildServer buildServer = (IBuildServer) tfs.GetService(typeof (IBuildServer));
var buildDetail = buildServer.CreateBuildDetailSpec("Team Project","Dev-CI"); 
buildDetail.MinFinishTime = DateTime.Now.Date.AddDays(-2);
var buildResult = buildServer.QueryBuilds(buildDetail).Builds.Dump();
buildInformation.Nodes.Where (i => i.Type == "ActivityTracking").FirstOrDefault ().Children.Nodes.Where (n => n.Type == "AgentScopeActivityTracking").FirstOrDefault ().Fields["ReservedAgentUri"].Dump("Agent");

构建将分配给任何在线代理。构建完成后,您应该能够从 IBuildDetail 的信息 (IBuildInformation) 属性 中获取代理信息。您可以尝试获取具有以下类型的节点:InformationTypes.AgentScopeActivityTracking Field and InformationFields.ReservedAgentName Field or InformationFields.ReservedAgentUri Field

示例代码:

 IBuildInformation buildInformation = buildDetail.Information;
 IBuildInformationNode[] buildInformationNodes = buildInformation.Nodes;
 string agentUri = buildInformationNodes[0].Children.Nodes[3].Fields["ReservedAgentUri"];
 IBuildAgent buildAgent = buildService.GetBuildAgent(new Uri(agentUri));

更多细节可以参考类似问题:TFS build duration report by agent