Azure DevOps Pipeline取消构建API调用失败求助
问题:Azure DevOps PATCH API取消构建报“Page not found”错误
我编写了一段PowerShell脚本,用于取消Azure DevOps Pipeline中的历史构建任务,代码如下:
$uri = "https://dev.azure.com/{organization}/{project}/_apis/build/builds/$buildId?api-version=5.1" $json = @{status="Cancelling"} | ConvertTo-Json -Compress Invoke-RestMethod -Uri $uri -Method Patch -Headers <headers> -ContentType "application/json" -Body $json
运行脚本时,PATCH API调用失败,报错信息如下:
Invoke-RestMethod : Page not found. html { height: 100%; } <img class="logo" src="data:image/png;base64 test.ps1:23 char:18 + ... $build = Invoke-RestMethod -Uri $uri -Method Patch -Headers @{Auth ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
请问我遗漏了什么配置或参数?
可能的原因及修复方案
1. 占位符未替换
代码中的{organization}和{project}是占位符,必须替换为你实际的Azure DevOps组织名称和项目名称,否则URL无效,直接返回404错误。
2. 身份验证头配置错误
<headers>是占位符,需配置有效的身份验证信息,Azure DevOps API常用两种验证方式:
- 个人访问令牌(PAT):生成拥有
Build (Read & Execute)权限的PAT,转换为Base64编码后添加到请求头:$pat = "你的PAT令牌内容" $headers = @{Authorization = "Basic " + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat"))} - Azure AD令牌:若使用Azure AD身份验证,需获取有效访问令牌,以
Bearer <access-token>格式添加到Authorization头中。
3. 构建状态值大小写错误
Azure DevOps API对状态值大小写敏感,取消构建的正确状态值是全小写的"cancelling",而非首字母大写的"Cancelling",修改JSON体:
$json = @{status="cancelling"} | ConvertTo-Json -Compress
4. API版本或URL路径问题
- 确认
$buildId变量已正确赋值为目标构建的有效ID,且该构建存在于指定项目中。 - 可尝试使用更高版本的API(如
7.1-preview.7),旧版本可能存在路径或功能差异:$uri = "https://dev.azure.com/{organization}/{project}/_apis/build/builds/$buildId?api-version=7.1-preview.7"
5. 验证URL有效性
先在浏览器中访问替换占位符和$buildId后的完整URL,确认能正常返回构建信息。如果浏览器也返回404,说明URL本身存在错误。
内容的提问来源于stack exchange,提问作者user989988
相关产品推荐
相关产品推荐

