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

Windows代理Azure Pipeline Bash脚本获取构建号遇安全配置错误

解决方案

1. 解决「Enhanced Security Configuration」报错

这个错误是Windows代理服务器开启了**Internet Explorer增强安全配置(IE ESC)**导致的,它会拦截对Azure DevOps API的请求,可二选一处理:

  • 登录Windows代理服务器,打开「服务器管理器」→「本地服务器」→找到「IE增强安全配置」,设置为「关闭」(需管理员权限)
  • 在代理服务器的IE/Edge中,将dev.azure.com添加到「受信任的站点」列表

2. 修正Bash脚本问题

你的脚本存在URL格式和SSL限制问题,修正后如下:

#!/bin/bash

echo "TAG: $TAG"
echo "VER: $VER"
echo "SYSTEM_ACCESSTOKEN: $SYSTEM_ACCESSTOKEN"

echo "Executing call to get latest build from pipeline definition Id"
# 补充URL中的问号,修复API地址格式
API_URL="${URL}?api-version=7.1-preview.1"
echo "API URL: $API_URL"

# 空用户名+系统令牌做Basic认证,添加--ssl-no-revoke绕过Windows SSL限制
RESPONSE=$(curl -u ":$SYSTEM_ACCESSTOKEN" --location --request GET "$API_URL" --ssl-no-revoke)
echo "Response: $RESPONSE"

# 提取构建号
BUILD_NUMBER=$(echo "$RESPONSE" | jq -r '.buildNumber')
echo "Latest Build Number: $BUILD_NUMBER"

关键修正点:

  • URL缺少?分隔路径与查询参数,导致API地址无效
  • 添加--ssl-no-revoke参数,绕过Windows环境下的SSL证书验证限制
  • Azure DevOps不校验Basic auth的用户名,留空即可,仅需令牌

3. 修正PowerShell脚本问题

PowerShell中系统令牌的引用方式错误,同时存在URL格式和参数冲突问题,修正后如下:

# 正确引用Azure DevOps系统令牌环境变量
$connectionToken = $env:SYSTEM_ACCESSTOKEN
$base64AuthInfo = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$connectionToken"))

# 补充URL中的问号,修复API地址格式
$BuildPipelineUrl = "$url`?$top=1&api-version=6.0" 

Write-Host "URL: $BuildPipelineUrl"

# 移除-UseDefaultCredential参数,避免与令牌认证冲突
$BuildPipelineInfo = Invoke-RestMethod -Uri $BuildPipelineUrl -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} 

$ver = $BuildPipelineInfo.value.buildnumber
Write-Host "Latest Build Number: $ver"

关键修正点:

  • Azure DevOps的系统令牌在PowerShell中需通过$env:SYSTEM_ACCESSTOKEN引用(环境变量用下划线代替点)
  • URL缺少?分隔符,导致API请求无效
  • 移除-UseDefaultCredential参数,避免与自定义Authorization头冲突

4. 更简便的替代方案:使用Azure DevOps CLI

如果代理服务器已安装Azure DevOps CLI,无需手动编写HTTP请求,直接用以下命令获取最新构建号:

# 流水线中自动使用系统令牌,无需手动登录
az devops login --organization "$ORG_URL"

# 获取指定流水线的最新构建号(替换YOUR_PIPELINE_ID为目标流水线ID)
BUILD_NUMBER=$(az pipelines build list --definition-id YOUR_PIPELINE_ID --top 1 --query "[0].buildNumber" --output tsv)
echo "Latest Build Number: $BUILD_NUMBER"

该方式无需处理令牌转换和HTTP请求细节,兼容性更好。

系统令牌相关说明

  • 系统令牌无需额外转换,直接作为Basic auth的密码部分即可(用户名留空)
  • 必须确保流水线任务已勾选「Allow scripts to access the OAuth token」,否则SYSTEM_ACCESSTOKEN环境变量不会被注入
  • 系统令牌的权限由流水线服务账号决定,需确保该账号有目标流水线的「读取」权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:09:23