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

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}"
}

关键说明

  1. 先通过computer.getMonitors().get(DiskSpaceMonitor.class)获取节点上的DiskSpaceMonitor实例
  2. 调用实例的getFreeSpace()方法获取磁盘空间信息
  3. 增加空值判断,避免节点不存在或监控器未启用时抛出异常

内容的提问来源于stack exchange,提问作者Jacob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 09:35:00