在Azure DevOps管道中,如何取消作业池的所有未决作业。我排队的人很多,看不到在哪里可以取消所有等待中的工作。
答案 0 :(得分:1)
Azure devops尚不具有从UI部分批量取消所有待处理作业的功能。
您可以编写脚本来调用rest api,以取消所有未完成的作业,作为解决方法。请查看以下步骤:
首先,使用list build rest api获取所有待处理的作业。
https://dev.azure.com/{organization}/{project}/_apis/build/builds?statusFilter=notStarted&api-version=5.1
然后,使用update build api取消待处理的作业:
PATCH https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}?api-version=5.1
请参阅以下Powershell脚本以供参考:
选中here以获取一个个人访问令牌,该令牌将在以下脚本中使用。
$url= "https://dev.azure.com/{organization}/{project}/_apis/build/builds?statusFilter=notStarted&api-version=5.1"
$pat="Personal Access Token"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($pat)"))
$pendingJobs=Invoke-RestMethod -Uri $url-Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo)} -Method get -ContentType "application/json"
$jobsToCancel = $pendingJobs.value
#Pending jobs donot consume the job agents in the agent pool. To filter the definition name to cancel pending jobs for a particular pipeline, you can use below filter criteria.
#$jobsToCancel = $pendingJobs.value | where {$_.definition.Name -eq "{Name of your pipeline }"}
#call update api to cancel each job.
ForEach($build in $jobsToCancel)
{
$build.status = "Cancelling"
$body = $build | ConvertTo-Json -Depth 10
$urlToCancel = "https://dev.azure.com/{organization}/{project}/_apis/build/builds/$($build.id)?api-version=5.1"
Invoke-RestMethod -Uri $urlToCancel -Method Patch -ContentType application/json -Body $body -Header @{Authorization = ("Basic {0}" -f $base64AuthInfo)}
}
您还可以向Microsoft开发团队submit a new feature request(单击建议一项功能并选择 azure devops ),以支持批量取消待处理的作业。希望他们会在以后的sprint中考虑添加此功能。