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

如何配置Jenkins作业:node离线时终止作业并发送邮件告警

当然可以实现!针对你这种仅在作业触发时检查专属Node状态、不想被全局Node监控插件频繁打扰的需求,完全可以在作业内部做针对性处理,下面分两种常见的Jenkins作业类型给你具体方案:

方案1:Pipeline作业(推荐,灵活可控)

在你的Pipeline脚本最开头加入Node状态检查逻辑,先判断专属Node是否在线,离线就直接终止作业并发送通知,避免进入pending状态。

示例Pipeline脚本:

// 替换成你的专属Node名称
def targetNode = "your-exclusive-node-name"

pipeline {
    agent none // 先不绑定Node,避免直接进入pending
    stages {
        stage('检查专属Node状态') {
            steps {
                script {
                    // 获取目标Node的实例对象
                    def nodeInstance = Jenkins.instance.getNode(targetNode)
                    // 判断Node是否存在且在线
                    if (!nodeInstance || !nodeInstance.toComputer().isOnline()) {
                        // 发送离线通知邮件
                        emailext(
                            subject: "Jenkins作业[${env.JOB_NAME}]执行终止:专属Node离线",
                            body: """作业${env.JOB_NAME}触发后,发现专属Node **${targetNode}** 当前处于离线状态,已终止作业执行。
请检查Node的网络连接或Jenkins代理状态。""",
                            to: "your-email@example.com" // 替换成你的接收邮箱
                        )
                        // 抛出错误终止作业,标记为失败
                        error("专属Node ${targetNode} 离线,作业终止")
                    } else {
                        echo "✅ 专属Node ${targetNode} 在线,继续执行作业"
                    }
                }
            }
        }
        stage('执行核心作业任务') {
            agent { node { label targetNode } }
            steps {
                // 这里写你原来的作业执行逻辑
                echo "开始执行作业核心任务..."
                // sh "your-command-here"
            }
        }
    }
}

关键说明:

  • 先设置agent none,避免一开始就绑定Node导致进入pending状态;
  • 通过Groovy脚本直接查询Jenkins内部的Node状态,判断准确;
  • 一旦检测到离线,立即发送邮件并终止作业,不会等待Node上线。
方案2:自由风格作业

如果你的作业是自由风格,也可以通过前置脚本检查+失败邮件通知来实现:

  1. 添加前置检查脚本
    进入作业配置页,在「构建」环节添加「执行系统Groovy脚本」,输入以下代码:

    def targetNode = "your-exclusive-node-name" // 替换成你的Node名称
    def nodeInstance = Jenkins.instance.getNode(targetNode)
    if (!nodeInstance || !nodeInstance.toComputer().isOnline()) {
        // 抛出异常触发构建失败
        throw new Exception("专属Node ${targetNode} 离线,作业无法执行")
    }
    
  2. 配置失败邮件通知
    在「构建后操作」添加「Editable Email Notification」(需提前安装Email Extension插件),然后:

    • 邮件主题设置为:Jenkins作业${PROJECT_NAME}执行失败:专属Node离线
    • 邮件内容说明Node离线的情况;
    • 关键设置:在「触发器」里选择「Failure - Any」,并通过「高级」选项添加匹配规则,只当构建失败原因包含「专属Node离线」关键字时才发送邮件,避免其他失败场景误发通知。

注意事项:

  • 执行Groovy脚本需要权限:如果遇到权限报错,进入「Manage Jenkins」→「In-process Script Approval」,批准脚本中涉及的方法调用;
  • 确保已安装Email Extension Plugin,否则无法使用emailext功能;
  • 这个方案完全符合你的需求:只有当作业触发时才检查Node状态,不会在非作业时段发送离线通知。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:22:18