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

如何在YAML流水线中调用Azure DevOps API?遇未授权问题求助

问题分析与解决方案

你的脚本出现未授权响应,主要有几个核心原因,咱们一步步来解决:

1. Bash变量替换失效(最直接的问题)

你在curl命令里用了单引号包裹Authorization头,而Bash中,单引号内的变量是不会被解析替换的——也就是说,你实际发送的令牌值是字面量$SYSTEMACCESSTOKEN,而不是环境变量里的真实令牌!

把单引号改成双引号就能解决这个变量替换问题:

- bash: |
    url="https://dev.azure.com/myOrg/myProj/_apis/build/builds/$(resources.pipeline.build.runID)/workitems"
    # 把Bearer后的单引号改成双引号,让变量被正确解析
    response=$(curl $url -H "Authorization: Bearer $SYSTEMACCESSTOKEN")
    echo $response
  env:
    SYSTEMACCESSTOKEN: $(System.AccessToken)

2. 流水线权限配置缺失

即使变量替换正常,System.AccessToken也需要足够的权限才能访问工作项,你需要检查两个配置:

  • 启用脚本访问OAuth令牌:
    在你的流水线编辑界面,找到对应的代理作业,进入「选项」标签页,确认「允许脚本访问OAuth令牌」选项已设置为「启用」。这个开关是让流水线脚本能拿到System.AccessToken的前提。

  • 配置服务账户权限:
    System.AccessToken对应的是「项目集合构建服务(你的组织名)」或「项目构建服务(你的项目名)」这个内置账户。你需要确保它有工作项读取权限:

    1. 进入项目设置 → 权限 → 找到上述构建服务账户
    2. 在「工作项跟踪」权限组里,确认「查看工作项」权限已设置为「允许」

3. 额外验证小技巧

如果还是有问题,可以做以下排查:

  • 在脚本里先添加echo $SYSTEMACCESSTOKEN(注意不要在公开流水线中执行,避免泄露令牌),确认变量是否有值
  • 在curl命令后加上-v参数(curl -v $url ...),查看详细的HTTP响应,确认错误是令牌无效还是权限不足

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:35:13