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

Azure DevOps经典发布管道中Bash任务无法识别变量

问题:Azure DevOps经典发布管道Bash任务中文件脚本调用变量失败

背景

在Azure DevOps经典发布管道的Bash任务中,执行以下.sh脚本:

set -e
pip install azure-identity
pip install azure-cosmos
pip install requests
set +e

az login --service-principal -u $(AZURE_CLIENT_ID) --tenant $(AZURE_TENANT_ID) --allow-no-subscriptions --federated-token $(AZURE_ID_TOKEN)

执行脚本前,已通过SPN完成Azure认证,并通过以下脚本成功设置并验证变量:

az account show

echo "##vso[task.setvariable variable=AZURE_CLIENT_ID]$servicePrincipalId" 
echo "##vso[task.setvariable variable=AZURE_ID_TOKEN]$idToken"
echo "##vso[task.setvariable variable=AZURE_TENANT_ID]$tenantId"

问题现象

  • 使用inline内联脚本运行时,代码执行完全正常
  • 切换为filePath文件脚本(代码与内联脚本完全一致)时,出现错误:
ERROR: argument --username/-u: expected one argument
2024-09-10T10:36:22.9450758Z 
2024-09-10T10:36:22.9451406Z Examples from AI knowledge base:
2024-09-10T10:36:22.9451894Z az login --service-principal -u http://azure-cli-2016-08-05-14-31-15 -p VerySecret --tenant contoso.onmicrosoft.com
2024-09-10T10:36:22.9453690Z Log in with a service principal using client secret. Use -p=secret if the first character of the password is '-'.
2024-09-10T10:36:22.9454012Z 
2024-09-10T10:36:22.9454461Z az login --service-principal -u http://azure-cli-2016-08-05-14-31-15 -p ~/mycertfile.pem --tenant contoso.onmicrosoft.com
2024-09-10T10:36:22.9454937Z Log in with a service principal using client certificate.
2024-09-10T10:36:22.9455157Z 
2024-09-10T10:36:22.9455468Z az login -u johndoe@contoso.com -p VerySecret
2024-09-10T10:36:22.9456041Z Log in with username and password. This doesn't work with Microsoft accounts or accounts that have two-factor authentication enabled. Use -p=secret if the first character of the password is '-'.
2024-09-10T10:36:22.9456402Z 

已尝试手动设置环境变量但无效,确认凭据有效且内联脚本可正常调用变量,仅文件脚本出现该问题。

解决方案

1. 修改变量引用语法

Azure DevOps中,filePath模式的脚本默认不会自动解析$(变量名)格式的占位符,而内联脚本会自动处理。需改用Bash原生环境变量语法:

set -e
pip install azure-identity
pip install azure-cosmos
pip install requests
set +e

az login --service-principal -u "$AZURE_CLIENT_ID" --tenant "$AZURE_TENANT_ID" --allow-no-subscriptions --federated-token "$AZURE_ID_TOKEN"

2. 启用文件脚本的变量替换(可选)

在Bash任务的高级设置中,勾选替换文件中的变量选项,Azure DevOps会自动将$(变量名)替换为对应值。注意此选项仅支持特定格式占位符,优先推荐使用Bash原生语法。

3. 验证变量加载情况

在文件脚本开头添加打印语句,确认变量是否正确传递到脚本环境:

echo "AZURE_CLIENT_ID: $AZURE_CLIENT_ID"
echo "AZURE_TENANT_ID: $AZURE_TENANT_ID"
echo "AZURE_ID_TOKEN: $AZURE_ID_TOKEN"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:06:14