Jenkins节点迁移至Linux后出现文件找不到错误求助
Jenkins Linux节点Groovy代码报错:文件找不到
java.io.FileNotFoundException: /home/jenkins/agent/workspace/tompia_system/.conf/config.json (No such file or directory)
涉及的Groovy函数代码如下:
import groovy.json.JsonSlurperClassic def call() { def inputFile = new File("${WORKSPACE}/.conf/config.json") def InputJSON = new JsonSlurperClassic().parseText(inputFile.text) def branch = env.BRANCH_NAME return InputJSON << InputJSON.targets."$branch"; }
已确认路径正确,该代码在Windows节点运行正常,报错发生在JsonSlurper解析环节。
排查与解决思路
- 检查文件权限:Linux下Jenkins代理进程的运行用户(一般是jenkins)需要具备该文件的读权限。执行
ls -l /home/jenkins/agent/workspace/tompia_system/.conf/config.json查看权限配置,若权限不足,执行chmod +r /home/jenkins/agent/workspace/tompia_system/.conf/config.json添加读权限,或者调整.conf目录权限让jenkins用户能访问目录及内部文件。 - 替换File类为Jenkins内置步骤:Jenkins流水线中直接使用
new File()会绕过Jenkins的节点文件系统适配,容易出现跨节点的文件访问问题。建议改用Jenkins官方提供的readFile步骤,它能正确读取代理节点上的文件内容,修改后的代码如下:import groovy.json.JsonSlurperClassic def call() { def inputContent = readFile("${WORKSPACE}/.conf/config.json") def InputJSON = new JsonSlurperClassic().parseText(inputContent) def branch = env.BRANCH_NAME return InputJSON << InputJSON.targets."$branch"; } - 验证隐藏目录存在性:Linux下以
.开头的目录为隐藏目录,执行ls -a /home/jenkins/agent/workspace/tompia_system确认.conf目录确实存在。 - 检查路径大小写:Linux文件系统区分大小写,确认代码中的目录名、文件名和实际文件系统中的完全一致,比如不要把
config.json写成Config.JSON。
内容的提问来源于stack exchange,提问作者Martin1999
相关产品推荐
相关产品推荐

