如何在非流水线多配置Jenkins任务的Python脚本中使用Jenkins参数?
Jenkins多配置项目Python脚本路径读取失败解决
问题场景
- Jenkins任务为多配置项目,Python脚本在Bash Shell中运行
- 尝试通过Jenkins参数
REPO_PATH(值为gramar/repo)读取目标路径下的JSON文件,执行时出现文件找不到错误
原代码
import json import os PATH = os.environ.get('REPO_PATH') json_text = str() with open ('PATH/file.json','r') as f: json_text = f.read() data = json.loads(json_text)
报错信息
Traceback (most recent call last): File "script.py", line 9, in with open 'PATH/file.json', 'r') as f: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [Errno 2] No such file or directory:'PATH/file.json'
错误原因
代码中把变量PATH当成字符串字面量传入open()函数,Python会直接查找名为PATH/file.json的文件,而非使用环境变量获取到的gramar/repo路径进行拼接。
修复方案
1. 正确拼接路径
使用Python的f-string或字符串拼接,将变量值与文件名组合:
方案一(f-string,推荐)
import json import os repo_path = os.environ.get('REPO_PATH') json_text = "" with open(f'{repo_path}/file.json', 'r') as f: json_text = f.read() data = json.loads(json_text)
方案二(字符串拼接)
import json import os repo_path = os.environ.get('REPO_PATH') json_text = "" with open(repo_path + '/file.json', 'r') as f: json_text = f.read() data = json.loads(json_text)
2. 确认环境变量传递
在执行Python脚本前,先在Bash中打印REPO_PATH确认参数已正确传递:
echo $REPO_PATH python script.py
内容的提问来源于stack exchange,提问作者Marta
相关产品推荐
相关产品推荐

