如何在Azure Pipeline中无需PowerShell读取仓库JSON值存为流水线变量
实现方案
你可以通过Linux/macOS代理内置的jq工具或者Python完成JSON解析,完全不需要使用PowerShell,步骤如下:
方案1:使用jq解析(推荐)
Azure DevOps提供的默认Ubuntu/macOS代理都预装了jqJSON解析工具,直接使用即可:
- 确认流水线使用Linux或macOS类型的代理
- 添加Bash任务读取JSON并设置为流水线变量,示例完整流水线YAML如下:
trigger: - '*' # 匹配你现有的全分支触发规则 pool: vmImage: 'ubuntu-latest' steps: - bash: | # 读取JSON字段值,-r参数用于输出无引号的原始字符串 KEY1_VAL=$(jq -r '.key1' file.json) KEY2_VAL=$(jq -r '.key2' file.json) # 写入流水线变量,后续任务可直接通过$(key1)、$(key2)引用 echo "##vso[task.setvariable variable=key1]$KEY1_VAL" echo "##vso[task.setvariable variable=key2]$KEY2_VAL" displayName: '解析file.json并设置流水线变量' # 测试变量是否生效,正式使用时可删除该步骤 - bash: | echo "key1取值为:$(key1)" echo "key2取值为:$(key2)" displayName: '验证JSON变量读取结果'
方案2:使用Python解析(无jq环境可选)
如果你的代理环境无法使用jq,可以用默认预装的Python实现解析,替换上面的Bash任务内容即可:
python3 -c " import json with open('file.json', encoding='utf-8') as f: config = json.load(f) print(f'##vso[task.setvariable variable=key1]{config[\"key1\"]}') print(f'##vso[task.setvariable variable=key2]{config[\"key2\"]}') "
注意事项
- 如果
file.json不在仓库根目录,需要替换代码中的file.json为实际相对路径,例如./src/config/file.json - 如果需要跨阶段使用读取到的变量,设置变量时添加
isOutput=true参数,同时给Bash任务设置name属性,后续阶段通过dependencies.阶段名.outputs['任务名.变量名']引用即可
内容的提问来源于stack exchange,提问作者DaveVentura
相关产品推荐
相关产品推荐

