Azure Pipelines中Python脚本间传递字符串列表变量问题
解决Azure Pipelines中Python脚本传递列表变量的问题
问题根源
Azure Pipelines的所有流水线变量本质都是字符串类型,无法直接存储Python列表对象。你第一步设置的['csharp', 'java']实际会被当作普通字符串传递,后续脚本用os.environ.get()拿到的只是这个字符串,而非可直接使用的列表。
解决方案
通过JSON序列化/反序列化来传递结构化数据:
1. 第一步脚本:将列表转为JSON字符串后设置变量
import json import os # 假设从API获取的列表 repo_languages = ['csharp', 'java'] # 序列化为JSON字符串 languages_json = json.dumps(repo_languages) # 设置流水线变量 print(f"##vso[task.setvariable variable=REPO_LANGUAGES]{languages_json}")
2. 后续脚本:读取JSON字符串并反序列化为列表
import os import json # 获取环境变量中的JSON字符串 languages_str = os.environ.get('REPO_LANGUAGES') # 反序列化为Python列表 if languages_str: repo_languages = json.loads(languages_str) # 现在可以正常使用列表操作,比如遍历 for lang in repo_languages: print(f"处理语言:{lang}") else: # 处理变量不存在的情况 repo_languages = []
替代方案(简单场景)
如果只是简单的字符串列表,也可以用逗号分隔字符串传递:
- 第一步设置变量:
print(f"##vso[task.setvariable variable=REPO_LANGUAGES]{','.join(repo_languages)}") - 后续脚本读取:
repo_languages = languages_str.split(',') if languages_str else []
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

