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

Jenkins Groovy脚本如何替换已废弃的cliOnline()节点上线方法

批量上线Jenkins节点非废弃API实现方案

改动点说明

  • 废弃方法替换:原脚本使用的cliOnline()是Jenkins内部专供CLI调用的非公开方法,已标记废弃,替换为hudson.model.Computer类公开稳定的connect(boolean force)方法,功能完全对齐,无兼容性风险。
  • 修复原脚本语法问题:原代码打印上线后状态的行缺失字符串拼接符+,改写后用Groovy原生字符串插值修复,可读性更高。
  • 补充异常边界判断:增加节点Computer实例空判断,避免特殊状态节点触发空指针异常;增加短等待时间,避免状态打印时连接流程还未完成导致结果不准。

可直接运行的改写后脚本

import jenkins.model.Jenkins

// 待上线节点名称关键词列表
def nodesChecklist = ["PD100069", "PD100070", "PD100090", "PD10756"]
def allNodes = Jenkins.instance.getNodes()

nodesChecklist.each { keyword ->
    allNodes.each { node ->
        def nodeName = node.nodeName
        if (nodeName.contains(keyword)) {
            def computer = node.toComputer()
            if (!computer) {
                println "跳过节点 ${nodeName}:实例状态异常,无法获取计算对象"
                return
            }
            println "节点 ${nodeName} 当前离线状态:${computer.offline}"
            if (computer.offline) {
                println "正在触发节点 ${nodeName} 上线..."
                // 非废弃API:强制发起节点连接,替代原cliOnline()
                computer.connect(true)
                // 等待连接流程初始化
                Thread.sleep(1000)
                println "节点 ${nodeName} 当前在线状态:${computer.online}"
            }
        }
    }
}

// 持久化配置变更(可选,部分Jenkins版本需要执行)
Jenkins.instance.save()

可选:基于OnlineNodeCommand的实现

如果你需要严格复用Jenkins CLI上线命令的内置逻辑(比如统一CLI层的权限校验、日志输出规则),可以将上线逻辑替换为如下代码,但常规运维场景直接使用上面的connect()方法更轻量,不需要额外处理CLI命令的依赖初始化:

import hudson.cli.OnlineNodeCommand
import jenkins.model.Jenkins
import java.io.PrintWriter

def onlineCmd = new OnlineNodeCommand()
onlineCmd.channel = Jenkins.instance.masterComputer.channel
onlineCmd.execute(null, Locale.default, [nodeName] as String[], new PrintWriter(System.out, true))

提示:脚本需在Jenkins管理后台的「脚本控制台」执行,执行账号需具备管理员权限,建议先在测试环境验证后再操作生产实例。


内容的提问来源于stack exchange,提问作者Mads Sander Høgstrup

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:03:27