You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:45:33