Jenkins脚本调用DiskSpaceMonitor.getFreeSpace报错,是否需强制转换?
Jenkins节点磁盘空间获取错误解决
你遇到的错误:
No signature of method: java.lang.Class.getFreeSpace() is applicable for argument types: (hudson.slaves.SlaveComputer)
核心问题是直接调用了DiskSpaceMonitor类的静态方法,而该方法实际是实例方法,和SlaveComputer是否为Computer子类无关,不需要额外强制类型转换。
错误代码分析
原代码:
Computer computer = Jenkins.instance.getComputer(env.NODE_NAME) freeSpace = DiskSpaceMonitor.getFreeSpace(computer).size
这里错误地用DiskSpaceMonitor类直接调用getFreeSpace,但getFreeSpace是DiskSpaceMonitor实例的方法,必须先获取节点对应的监控器实例才能调用。
修正后的代码
Computer computer = Jenkins.instance.getComputer(env.NODE_NAME) if (computer != null) { // 从节点的监控器中获取DiskSpaceMonitor实例 DiskSpaceMonitor monitor = computer.getMonitors().get(DiskSpaceMonitor.class) if (monitor != null) { def freeSpace = monitor.getFreeSpace() println "节点可用磁盘空间: ${freeSpace.size}" } else { println "当前节点未启用DiskSpaceMonitor监控器" } } else { println "未找到指定节点: ${env.NODE_NAME}" }
关键说明
- 先通过
computer.getMonitors().get(DiskSpaceMonitor.class)获取节点上的DiskSpaceMonitor实例 - 调用实例的
getFreeSpace()方法获取磁盘空间信息 - 增加空值判断,避免节点不存在或监控器未启用时抛出异常
内容的提问来源于stack exchange,提问作者Jacob
相关产品推荐
相关产品推荐

