【问题标题】:Azure Devops Rest API- Get builds currently queued in Agent PoolAzure Devops Rest API - 获取当前在代理池中排队的构建
【发布时间】:2019-06-09 22:31:05
【问题描述】:
有没有办法只从 Azure DevOps REST API 获取在队列中等待特定池中可用代理的构建?
我目前有这个端点,可以为我提供池中发生的所有作业请求:
https://dev.azure.com/{organization}/_apis/distributedtask/pools/{poolid}/jobrequests
我查看了 API 文档,但找不到任何关于代理池的信息。
【问题讨论】:
标签:
azure
azure-devops
azure-devops-rest-api
【解决方案1】:
我需要同样的东西,但我在 Linux 上运行。 Linux 中@shayki-abramczyk 的等效答案是:
jobRequests=$(curl -u peterjgrainger:${{ YOUR_DEVOPS_TOKEN }} https://dev.azure.com/{your_org}/_apis/distributedtask/pools/{your_pool}/jobrequests?api-version=6.0)
queuedJobs=$(echo $jobRequests | jq '.value | map(select(has("assignTime") | not)) | length')
runningJobs=$(echo $jobRequests | jq '.value | map(select(.result == null)) | length')
【解决方案2】:
没有开箱即用的 API,但我们可以使用常规 API 并过滤结果。
例如,我使用您提供的 API 并获得池中的所有构建,然后,我使用 PowerShell 过滤结果以仅获得等待可用代理的构建。
我怎么知道谁在等待?在 JSON 结果中,每个构建都有一些属性,如果构建开始在代理上运行,他得到一个属性assignTime,所以我搜索没有这个属性的构建。
#... Do the API call and get the repsone
$json = $repsone | ConvertFrom-Json
$json.value.ForEach
({
if(!$_.assignTime)
{
Write-Host "Build waiting for an agent:"
Write-Host Build Definition Name: $_.definition.name
Write-Host Build Id: $_.owner.id
Write-Host Queue Time $_.queueTime
# You can print more details about the build
}
})
# Printed on screen:
Build waiting for an agent:
Build Definition Name: GitSample-CI
Build Id: 59
Queue Time 2019-01-16T07:36:52.8666667Z
如果您不想迭代所有构建(有意义),您可以通过这种方式检索等待的构建:
$waitingBuilds = $json.value | where {-not $_.assignTime}
# Then print the details