You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 04:12:13