如何在Windows和Linux代理的Azure DevOps中导入JSON为变量?
跨平台读取JSON文件为Azure DevOps流水线变量的通用方案
以下两种方案均兼容Windows和Linux代理,且Azure DevOps托管代理默认预装对应运行环境:
方案1:使用Python脚本
- 准备读取JSON的Python脚本(示例命名为
load_json_vars.py):
import json # 读取JSON文件,替换为你的文件路径 with open('config.json', 'r', encoding='utf-8') as f: config_data = json.load(f) # 递归扁平化嵌套JSON并设置变量 def set_variables(data, prefix=""): for key, value in data.items(): var_name = f"{prefix}.{key}" if prefix else key if isinstance(value, dict): set_variables(value, var_name) else: # 输出Azure DevOps变量设置指令 print(f"##vso[task.setvariable variable={var_name};]{value}") set_variables(config_data)
- 在Azure DevOps流水线中添加
Python script任务,指定运行上述脚本即可。
方案2:使用Node.js脚本
- 准备读取JSON的Node.js脚本(示例命名为
load_json_vars.js):
const fs = require('fs'); // 读取JSON文件,替换为你的文件路径 const configData = JSON.parse(fs.readFileSync('config.json', 'utf8')); // 递归扁平化嵌套JSON并设置变量 function setVariables(data, prefix = "") { Object.entries(data).forEach(([key, value]) => { const varName = prefix ? `${prefix}.${key}` : key; if (typeof value === 'object' && value !== null && !Array.isArray(value)) { setVariables(value, varName); } else { // 输出Azure DevOps变量设置指令 console.log(`##vso[task.setvariable variable=${varName};]${value}`); } }); } setVariables(configData);
- 在Azure DevOps流水线中添加
Node.js任务,指定运行上述脚本即可。
注意事项
- 若需将变量设为输出变量供后续任务引用,可在指令中添加
isOutput=true,例如:##vso[task.setvariable variable={var_name};isOutput=true;]{value} - 若JSON包含数组类型数据,可根据需求调整脚本逻辑(如转为字符串存储)
- 确保JSON文件路径与流水线工作目录匹配,必要时使用绝对路径
内容的提问来源于stack exchange,提问作者PassionateDeveloper
相关产品推荐
相关产品推荐

