如何将Variable Group作为字典整体传入Python脚本
方法1:通过环境变量遍历(无需额外配置,推荐)
链接到管道的Variable Group内的非加密变量,运行时会自动转换为任务进程的环境变量:变量名自动转全大写,.自动替换为_。
你只需要给目标Variable Group内的所有变量加统一前缀(比如MY_VG_),就可以在Python中直接过滤环境变量拿到整组内容:
- task: PythonScript@0 inputs: scriptSource: 'inline' script: | import os # 替换为你的变量组统一前缀 vg_prefix = "MY_VG_" vg_dict = {} for env_key, env_val in os.environ.items(): if env_key.startswith(vg_prefix): original_key = env_key.removeprefix(vg_prefix).lower() vg_dict[original_key] = env_val # 直接遍历使用 for k, v in vg_dict.items(): print(f"{k}: {v}")
注意:加密的Secret变量默认不会自动注入环境变量,需要你在任务的
env字段显式映射才能读取:- task: PythonScript@0 inputs: scriptSource: 'inline' script: | import os print("secret值:", os.getenv("MY_SECRET")) env: MY_SECRET: $(你变量组内的secret变量名)
方法2:调用DevOps API拉取完整变量组(无需给变量加前缀)
如果不想修改变量组内的变量名加前缀,可以在管道中先调用Azure DevOps CLI拉取变量组的完整结构,转成JSON后传给Python解析:
# 先拉取变量组内容存为管道变量 - task: AzureCLI@2 inputs: azureSubscription: '你的Azure DevOps服务连接名' scriptType: 'bash' inlineScript: | # 替换为你的项目名、变量组名 vg_json=$(az pipelines variable-group show --group-name "你的变量组名" --project "你的项目名" -o json) echo "##vso[task.setvariable variable=VG_JSON]$vg_json" # Python脚本直接解析JSON - task: PythonScript@0 inputs: scriptSource: 'inline' script: | import json, os vg_data = json.loads(os.getenv("VG_JSON")) # 提取所有非加密变量 vg_dict = {k: v["value"] for k, v in vg_data["variables"].items() if not v.get("isSecret")} print(vg_dict)
该方法需要给管道的服务账号开通对应变量组的读取权限。
内容的提问来源于stack exchange,提问作者Dumbledore__
相关产品推荐
相关产品推荐

