You need to enable JavaScript to run this app. BASH脚本调用Azure DevOps REST API的PAT编码问题求助
优惠活动
大模型
产品
解决方案
定价
更多

BASH脚本调用Azure DevOps REST API的PAT编码问题求助

正确实现方案

1. PAT编码修正

你原有的PAT编码逻辑(空用户名拼接PAT后做Base64编码)完全符合Azure DevOps Basic认证的要求,唯一常见问题是GNU版本base64默认会在输出每76个字符后插入换行符,会导致认证头失效,需要加参数禁用换行:

# 兼容Linux(GNU)和macOS的base64编码
if base64 --help 2>&1 | grep -q -- "-w, --wrap"; then
  # Linux环境
  B64_PAT=$(printf "%s" ":$PAT" | base64 -w 0)
else
  # macOS环境
  B64_PAT=$(printf "%s" ":$PAT" | base64)
fi

2. 调用API代码修正

你原有代码存在两个问题:一是变量赋值时外层多余的双引号会导致语法错误,二是手动拼接JSON如果遇到含特殊字符的仓库名会破坏JSON结构,修正后完整代码如下:

# 提前定义所有需要的变量
PAT="你的PAT字符串"
OrganizationName="你的组织名"
projectId="你的项目ID"
RepoName="要创建的仓库名"

# PAT编码
if base64 --help 2>&1 | grep -q -- "-w, --wrap"; then
  B64_PAT=$(printf "%s" ":$PAT" | base64 -w 0)
else
  B64_PAT=$(printf "%s" ":$PAT" | base64)
fi

# 调用Azure DevOps API创建仓库
Repo_Creation_Status=$(curl --write-out "%{http_code}" --location --request POST "https://dev.azure.com/${OrganizationName}/${projectId}/_apis/git/repositories?api-version=6.1-preview.1" \
        --header "Authorization: Basic ${B64_PAT}" \
        --header "Content-Type: application/json" \
        --data-raw '{
          "name": "'"${RepoName}"'",
          "project": {
            "id": "'"${projectId}"'"
          }
        }' --output output.txt --silent)

# 可打印状态码快速排查问题
echo "请求返回状态码: ${Repo_Creation_Status}"

注意事项

  • 请确保使用的PAT已经开通代码仓库的创建权限,对应权限范围为Code > Read & write
  • 变量projectId可以是项目的GUID,也可以是项目的名称,二者都可以被接口识别
  • 如果需要处理含特殊字符的仓库名,建议用jq工具生成合法JSON,避免手动拼接出错,示例如下:
# 用jq生成合法JSON的示例
REQUEST_BODY=$(jq -n \
  --arg name "$RepoName" \
  --arg pid "$projectId" \
  '{name: $name, project: {id: $pid}}')

内容的提问来源于stack exchange,提问作者Devops-Learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 07:54:07