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

如何捕获Jenkins流水线超时提示并触发用户通知?

解决方案

方法1:捕获超时异常(推荐)

直接针对timeout步骤抛出的异常处理,比解析日志更可靠,能避免因Jenkins版本更新导致日志文本变化的问题。

修改你的流水线阶段代码,用try-catch包裹超时逻辑,精准判断超时异常并触发通知:

stage('My stage') {
    steps {
        script {
            try {
                timeout(time: 2, unit: 'MINUTES') {
                    // 这里放你的阶段原有执行逻辑
                    echo '执行阶段任务...'
                }
            } catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e) {
                // 判断是否为超时导致的中断
                if (e.getCause() instanceof org.jenkinsci.plugins.workflow.steps.TimeoutStepExecution.Timeout) {
                    // 发送通知,示例用Slack(需提前安装Slack插件)
                    slackSend channel: '#pipeline-alerts', message: '⚠️ My stage 阶段执行超时,已自动终止'
                    // 若需要标记流水线为失败,保留下面的抛出语句;若要继续执行则删除
                    throw e
                }
            }
        }
    }
}

方法2:解析构建日志捕获特定消息

如果必须通过匹配目标日志字符串触发通知,可以在阶段的post块中检查构建日志:

stage('My stage') {
    steps {
        timeout(time: 2, unit: 'MINUTES') {
            // 阶段原有执行逻辑
        }
    }
    post {
        always {
            script {
                // 获取构建最后1000行日志(可根据需求调整行数)
                def buildLog = currentBuild.rawBuild.getLog(1000)
                if (buildLog.contains('Cancelling nested steps due to timeout')) {
                    // 发送通知,示例用邮件(需配置Jenkins邮件服务)
                    mail to: 'user@example.com', 
                         subject: '[Jenkins流水线] My stage阶段超时通知', 
                         body: '流水线中My stage阶段因超时被终止,请查看构建日志。'
                }
            }
        }
    }
}

注意事项

  • 使用方法2时,需要在Jenkins的脚本安全页面授权hudson.model.Run.getLog(int)方法,否则会报错;
  • 发送通知的方式需根据已安装的插件选择,比如邮件、Slack、钉钉等,确保对应插件已安装并配置;
  • 优先选择方法1,因为它不依赖日志文本,稳定性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:09:12