Azure DevOps Pipeline创建Bug的PowerShell任务报错:页面未找到
解决Azure Pipeline中创建Bug时的“页面未找到”错误
1. 修复API URL中的工作项类型占位符
你的URL里的$bug是未定义的PowerShell变量,但Azure DevOps创建Bug的API要求URL中使用固定的$Bug(注意大写)作为工作项类型标识,这是API路径的固定部分而非变量。如果$bug未赋值,会导致URL缺失关键片段,直接触发404错误。
修正后的URL:
$uri = "https://dev.azure.com/Abc/Def/_apis/wit/workitems/$Bug?api-version=6.1-preview.3"
2. 修正PAT的Basic认证格式
Basic认证要求将用户名:PAT转换为Base64编码(用户名可留空),你当前直接使用原始PAT的方式不符合认证规范,会导致请求被拒绝或解析异常。
修正认证头:
$pat = "U2hyayuty43f4y32tfytf23ytf" $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat")) $headers = @{ "Authorization" = "Basic $base64AuthInfo" "Content-Type" = "application/json-patch+json" }
3. 移除多余的ConvertTo-Json转换
你的$defectPayload已经是合法的JSON Patch格式数组,再次使用ConvertTo-Json会将其转义为字符串,导致API无法解析请求体,进而引发错误。
修正请求调用:
Invoke-RestMethod -Uri $uri -Headers $headers -Method Post -Body $defectPayload
完整修正后的代码
# 设置用于创建新工作项的REST API URL $uri = "https://dev.azure.com/Abc/Def/_apis/wit/workitems/$Bug?api-version=6.1-preview.3" echo $uri # 设置用于认证的个人访问令牌(PAT) $pat = "U2hyayuty43f4y32tfytf23ytf" $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$pat")) $headers = @{ "Authorization" = "Basic $base64AuthInfo" "Content-Type" = "application/json-patch+json" } # 构建新缺陷工作项的JSON请求体 $defectPayload = @" [ { "op": "add", "path": "/fields/System.Title", "from": null, "value": "Test of REST functionality" }, { "op": "add", "path": "/fields/System.State", "from": null, "value": "New" } ] "@ # 创建新缺陷工作项 Invoke-RestMethod -Uri $uri -Headers $headers -Method Post -Body $defectPayload
额外检查项
- 确保Pipeline使用的PAT拥有**Work Items (Write)**权限,且作用域覆盖目标项目
- 验证
Abc(组织名)和Def(项目名)是否与实际环境完全匹配,注意Azure DevOps的名称区分大小写
内容的提问来源于stack exchange,提问作者Shriya Soni
相关产品推荐
相关产品推荐

