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

3

我可以获取构建的详细信息,但是它不包含任何有关构建作业的信息。例如,每个构建作业都在一个构建代理上运行-如何使用REST Api获取此信息?

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


关闭投票的原因是什么? - mark
2个回答

6
您可以在时间轴记录中找到所有任务和作业:时间轴 - 获取。您可以将此模板粘贴到浏览器中,以检查特定构建的结果:

https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/timeline

我使用Microsoft.TeamFoundationServer.Client软件包,并且以下是其示例:
    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() : "");
        }
    }

https://github.com/ashamrai/TFRestApi/blob/master/19.TFRestApiAppQueueBuild/TFRestApiApp/Program.cs


它是否让您知道特定构建作业所使用的构建代理? - mark
每条记录都包含workerName成员。也许对你有用。 - Shamrai Aleksander

3

https://dev.azure.com/{组织}/{项目}/_apis/build/builds/{构建ID} 可以让您了解对象 queue 下使用的代理,它会显示代理队列 (91) 号和池 ID (8)

"queue":{  
      "id":91,
      "name":"MotBuild-Default",
      "pool":{  
         "id":8,
         "name":"MotBuild-Default"
      }

使用 https://dev.azure.com/{org}/_apis/distributedtask/pools/{pool_id}?api-version=5.0-preview.1 或者 https://dev.azure.com/{org}/{project}/_apis/distributedtask/queues/{queue_id} 将返回代理池。
现在使用 https://dev.azure.com/{org}/_apis/distributedtask/pools/{pool_id}/agents 将返回代理池下代理的列表。
现在我已经解释了所有内容,让我们试着将所有东西联系起来。
1) 使用 https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId} 查找队列和代理池 ID。
2) 使用 https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/timeline 查找类型为 Job 的记录和属性 workerName,它将返回使用的代理名称。
3) 使用 https://dev.azure.com/{org}/_apis/distributedtask/pools/{pool_id}/agents 查询代理并通过从步骤#2中找到的名称过滤器筛选出代理 id
4) 最后查询 https://dev.azure.com/{org}/_apis/distributedtask/pools/{pool_id}/agents/{agent_id} 将返回代理的高级信息,但不包含太多信息。
5) 要获取详细的能力,请查询未记录的 API https://dev.azure.com/{org}/_apis/distributedtask/pools/{pool_id}/agents/{agent_id}?includeCapabilities=true,将返回一个巨大的结果集!我想这就是你想要的。 了解更多 API 信息,请访问:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接