Azure devops 如何使用Azure DevOps REST APi获取构建作业?

Azure devops 如何使用Azure DevOps REST APi获取构建作业?,azure-devops,azure-devops-rest-api,Azure Devops,Azure Devops Rest Api,因此,我可以获得构建细节,但它不包含任何关于构建作业的信息。例如,每个构建作业都在构建代理上运行-如何使用REST Api获取这一部分 我们讨论的是vNext构建,而不是XAML。您可以在时间线记录中找到所有任务和作业:。您可以将此模板粘贴到浏览器中,以检查特定生成的结果: {organization}/{project}/_-api/build/builds/{buildId}/timeline 我使用package,下面是它的示例: static void PrintTimeLine

因此,我可以获得构建细节,但它不包含任何关于构建作业的信息。例如,每个构建作业都在构建代理上运行-如何使用REST Api获取这一部分


我们讨论的是vNext构建,而不是XAML。

您可以在时间线记录中找到所有任务和作业:。您可以将此模板粘贴到浏览器中,以检查特定生成的结果:

{organization}/{project}/_-api/build/builds/{buildId}/timeline

我使用package,下面是它的示例:

    static void PrintTimeLine(string TeamProjectName, int BuildId)
    {
        var timeline = BuildClient.GetBuildTimelineAsync(TeamProjectName, BuildId).Result;

        if (timeline.Records.Count > 0)
        {
            Console.WriteLine("Task Name-----------------------------Start Time---Finish Time---Result");
            foreach(var record in timeline.Records)
                if (record.RecordType == "Task")
                Console.WriteLine("{0, -35} | {1, -10} | {2, -10} | {3}",
                    (record.Name.Length < 35) ? record.Name : record.Name.Substring(0, 35), 
                    (record.StartTime.HasValue) ? record.StartTime.Value.ToLongTimeString() : "",
                    (record.FinishTime.HasValue) ? record.FinishTime.Value.ToLongTimeString() : "",
                    (record.Result.HasValue) ? record.Result.Value.ToString() : "");
        }
    }
static void PrintTimeLine(字符串TeamProjectName,int BuildId)
{
var timeline=BuildClient.GetBuildTimelineAsync(TeamProjectName,BuildId).Result;
如果(timeline.Records.Count>0)
{
Console.WriteLine(“任务名称------------------开始时间---完成时间---结果”);
foreach(timeline.Records中的var记录)
if(record.RecordType==“任务”)
Console.WriteLine({0,-35}{1,-10}{2,-10}{3}),
(record.Name.Length<35)?record.Name:record.Name.Substring(0,35),
(record.StartTime.HasValue)?record.StartTime.Value.ToLongTimeString():“”,
(record.FinishTime.HasValue)?record.FinishTime.Value.ToLongTimeString():“”,
(record.Result.HasValue)?record.Result.Value.ToString():“”);
}
}

https://dev.azure.com/{organization}/{project}/_-api/build/builds/{buildId}
将让您知道对象
队列下使用的代理,并在那里显示代理队列(91)编号和池id(8)

使用


https://dev.azure.com/{org}/\u api/distributedtask/pools/{pool\u id}?api版本=5.0-preview.1
https://dev.azure.com/{org}/{project}/_api/distributedtask/queues/{queue\u id}
将返回池

所以现在使用
https://dev.azure.com/{org}/\u api/distributedtask/pools/{pool\u id}/agents
将返回代理池下的代理列表

既然我已经解释了所有这些,让我们试着把一切联系起来

1) 使用
https://dev.azure.com/{organization}/{project}/_api/build/builds/{buildId}
并查找队列和池ID

2) 使用
https://dev.azure.com/{organization}/{project}/_api/build/builds/{buildId}/timeline
并查找类型为
Job
的记录和属性
workerName
,该属性将返回所用代理的名称

3) 使用
https://dev.azure.com/{org}/_API/distributedtask/pools/{pool_id}/agents
并通过从上面第#2步中找到的名称筛选
名称
来查找代理
id

4) 最后查询
https://dev.azure.com/{org}/\u api/distributedtask/pools/{pool\u id}/agents/{agent\u id}
将返回代理的高级信息,而不是太多信息

下一个api没有文档记录

5) 获取详细的功能查询
https://dev.azure.com/{org}/\u API/distributedtask/pools/{pool\u id}/agents/{agents\u id}?includeCapabilities=true
将返回一个巨大的结果集我想这就是你想要的。

有关API的更多信息,请访问:


投票关闭是因为…?它是否让您知道用于特定生成作业的生成代理?每条记录都包含workerName成员。也许它会对你有用。
"queue":{  
      "id":91,
      "name":"MotBuild-Default",
      "pool":{  
         "id":8,
         "name":"MotBuild-Default"
      }