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

如何在Azure DevOps中获取分支最新流水线构建结果

解决Azure DevOps流水线中获取上一次构建结果返回null的问题

核心问题:URL参数中的$top被Shell解析为空

你的curl命令里$top=1在Shell环境下会被当作变量解析,若未定义top变量,该部分会变成空字符串,导致API请求参数错误,返回的构建列表为空,最终jq提取结果为null。

修复步骤:

  1. 修正URL参数的转义
    将$top改为\$top避免Shell解析$符号,同时添加请求头确保返回JSON格式,还可通过jq处理无历史构建的场景:
previousRunId=$(curl -u ":$(System.AccessToken)" -H "Accept: application/json" -X GET "$(System.CollectionUri)/$(System.TeamProjectId)/_apis/build/builds?definitions=$(System.DefinitionId)&branchName=$(Build.SourceBranch)&\$top=1" | jq '.value[0].result // "NoPreviousBuild"')
echo "Previous run status: ${previousRunId}"
  • \$top:保留API所需的$top参数;
  • -H "Accept: application/json":强制返回JSON格式,避免解析异常;
  • // "NoPreviousBuild":当无历史构建时,返回友好提示而非null。
  1. 确保OAuth令牌权限

    • 进入流水线编辑页面,在代理作业的选项中勾选「允许脚本访问OAuth令牌」;
    • 确认项目的「构建服务(XXX)」账号拥有读取构建记录的权限(在项目设置→权限→构建服务账号中配置)。
  2. 验证分支名称匹配
    $(Build.SourceBranch)的格式为refs/heads/[分支名],Azure DevOps API支持该完整格式,若遇匹配问题,可尝试将分支名URL编码(比如把/替换为%2F)。

排查辅助:

先直接打印API返回的完整JSON,确认是否有数据:

curl -u ":$(System.AccessToken)" -H "Accept: application/json" "$(System.CollectionUri)/$(System.TeamProjectId)/_apis/build/builds?definitions=$(System.DefinitionId)&branchName=$(Build.SourceBranch)&\$top=1"

若返回的value数组为空,说明无对应分支的构建记录,需检查分支名称或确认流水线是否曾在该分支运行。

内容的提问来源于stack exchange,提问作者Likith J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:33:20