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

Azure Pipeline运行调用DevOps API的Python脚本报JSONDecodeError如何解决

解决方案

该JSON解析错误的核心原因是Azure Agent发起请求后,服务端返回的响应并非合法JSON格式,基本都是请求触发了权限错误、地址错误等场景,返回了HTML格式的错误提示页。本地运行正常说明你本地的PAT、网络配置符合要求,问题出在流水线运行环境的请求配置上,可按以下步骤排查修复:

  • 新增请求校验逻辑,先定位具体错误原因
    在解析响应前先校验HTTP状态码,并打印完整响应内容,确认报错根因,参考修改后的代码:

    import base64
    import requests
    import json
    import os
    
    # 从流水线环境变量读取PAT,不要硬编码
    AZURE_DEVOPS_PAT = os.getenv("AZURE_DEVOPS_PAT")
    authorization = str(base64.b64encode(bytes(':' + AZURE_DEVOPS_PAT, 'ascii')), 'ascii')
    headers = {
        'Accept': 'application/json',
        'Authorization': 'Basic ' + authorization
    }
    
    # 替换为官方公开API地址,注意去掉原地址里的{}、()占位符,填入实际的组织、项目名
    url = 'https://dev.azure.com/你的组织名/你的项目名/_apis/distributedtask/queues?api-version=7.1-preview.1'
    response = requests.get(url, headers=headers)
    
    # 先校验请求状态,避免直接解析非JSON内容
    if response.status_code != 200:
        print(f"请求失败,状态码:{response.status_code},完整响应内容:{response.text}")
        raise Exception(f"Azure DevOps API请求失败,状态码{response.status_code}")
    
    data = response.json()
    print(data)
    
  • 替换为官方公开API接口
    你当前使用的_settings/agentqueues?__rt=fps&__ver=2是Azure DevOps前端页面的内部私有接口,鉴权逻辑不固定,流水线环境调用很容易被拦截。查询代理队列的公开标准API为/_apis/distributedtask/queues,接口稳定性和兼容性更高。

  • 修正PAT配置
    不要在代码中硬编码PAT,将PAT存储到Azure Pipeline的加密变量中,命名为AZURE_DEVOPS_PAT,运行时通过环境变量读取。同时确认该PAT已开启Agent Pools > Read权限,且处于有效期内。

  • 排查网络访问限制
    如果你的Azure DevOps组织配置了IP访问限制,需将流水线Agent的出口IP添加到组织的IP白名单中,避免请求被拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:54:03