Azure DevOps队列作业卡住无法取消或删除问题求助
解决Azure DevOps队列中卡住的构建作业无法取消/删除的问题
问题背景
尝试删除队列作业时因未找到取消按钮,选择删除构建,导致队列中出现卡住的作业,无法通过常规方式或现有批量脚本取消/删除。现有PowerShell脚本仅能移除状态为notStarted的正常队列作业,对卡住的作业无效。
现有脚本如下:
$PATToken = "************************" $AuthHeader= @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($PATToken)")) } $azureDevops = "https://dev.azure.com/**********/***************" $BuildsUrl = "$azureDevops/_apis/build/builds" $filterBuilds = "$($BuildsUrl)?statusFilter=notStarted&api-version=6.0" (Invoke-RestMethod -Method Get -Uri $filterBuilds -Headers $AuthHeader).value | % { $uri = "$($BuildsUrl)/$($_.id)?api-version=6.0" # Azure Devops URI $body = '{"status":4}' # body $result = Invoke-RestMethod -Method Patch -Uri $uri -Headers $AuthHeader -ContentType 'application/json' -Body $body -Verbose #cancel build Write-Output "$($_.definition.name) canceled" }
问题分析
现有脚本仅过滤notStarted状态的构建,但卡住的作业可能处于inProgress(无实际进展)、canceling(取消流程卡住)等异常状态;且仅用Patch请求设置状态为4(已取消),对异常状态的构建可能无效,需要直接调用删除构建的API操作。
解决方案
1. 调整脚本覆盖异常状态并尝试删除操作
修改脚本扩展状态过滤范围,对卡住的作业先尝试取消,失败则直接调用删除接口:
$PATToken = "************************" $AuthHeader= @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($PATToken)")) } $azureDevops = "https://dev.azure.com/**********/***************" $BuildsUrl = "$azureDevops/_apis/build/builds" # 过滤包含卡住可能的状态:notStarted、inProgress、canceling $filterBuilds = "$($BuildsUrl)?statusFilter=notStarted,inProgress,canceling&api-version=6.0" (Invoke-RestMethod -Method Get -Uri $filterBuilds -Headers $AuthHeader).value | ForEach-Object { $buildId = $_.id $buildName = $_.definition.name # 先尝试取消构建 try { $cancelUri = "$($BuildsUrl)/$buildId?api-version=6.0" $body = '{"status":4}' Invoke-RestMethod -Method Patch -Uri $cancelUri -Headers $AuthHeader -ContentType 'application/json' -Body $body | Out-Null Write-Output "已尝试取消构建:$buildName (ID: $buildId)" } catch { Write-Warning "取消构建失败:$buildName (ID: $buildId),将尝试直接删除" # 直接删除构建 try { $deleteUri = "$($BuildsUrl)/$buildId?api-version=6.0" Invoke-RestMethod -Method Delete -Uri $deleteUri -Headers $AuthHeader | Out-Null Write-Output "已成功删除构建:$buildName (ID: $buildId)" } catch { Write-Error "删除构建也失败:$buildName (ID: $buildId) - $($_.Exception.Message)" } } }
2. 极端情况的手动处理
如果脚本仍无法解决,可尝试:
- 检查项目代理池状态,重启异常的构建代理
- 进入Azure DevOps构建详情页,刷新页面后再次尝试手动取消/删除
- 提交卡住的构建ID给Azure DevOps官方支持团队协助移除
内容的提问来源于stack exchange,提问作者Ercan Koc
相关产品推荐
相关产品推荐

