Azure DevOps非YAML流水线Bash文件脚本无法识别自定义pipeline变量pat
问题原因
- 非YAML格式的经典Azure DevOps流水线,仅会对内联脚本内容执行预扫描替换:你使用文件路径执行脚本时,ADO不会提前解析.sh文件中的
$(变量名)语法,会直接将文件内容提交给Bash执行。而$(PAT)在原生Bash语法中属于「命令替换」逻辑,会尝试执行名为PAT的命令取返回值,因此会抛出PAT: command not found报错。 - 流水线自定义变量不会默认注入到脚本的运行环境中:系统预置变量(如
BUILD_REPOSITORY_NAME)是ADO默认注入到任务环境变量的,自定义变量需要手动配置映射才能被脚本读取,这也是你直接用$PAT无法读到值的原因。
解决方法
推荐使用环境变量映射方案,操作步骤如下:
- 打开你当前流水线的Bash任务配置页,找到「环境变量」配置项
- 在配置框中添加一行映射规则:
PAT=$(pat),ADO会在启动脚本前自动将你定义的pat变量值注入为环境变量PAT - 修改
script.sh中的git clone命令为:
git clone https://username:$PAT@dev.azure.com/company/project/_git/repo-name
重新运行流水线即可正常执行。
如果不想修改任务配置,也可以选择将执行逻辑改为内联脚本,将变量作为参数传递给脚本文件:
- 内联脚本内容配置为:
chmod +x script.sh ./script.sh $(pat)
- 同时修改
script.sh首行添加参数接收逻辑:
PAT=$1 # 后续保留原有逻辑即可
内容的提问来源于stack exchange,提问作者hcdocs
相关产品推荐
相关产品推荐

