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

基于Groovy的Jenkins Pipeline脚本:读取HTML触发邮件告警

解决Jenkins Pipeline中解析HTML表格并触发告警的问题

直接通过字符串分割处理HTML内容很容易出错,因为HTML的格式可能随时变化。推荐使用专业的HTML解析库Jsoup来处理,以下是完整的Groovy Pipeline脚本实现:

步骤说明

  • 确保Jenkins环境中可以使用Jsoup(Pipeline脚本可通过@Grab直接引入,或在Jenkins全局库中提前配置)
  • 调用REST API获取HTML响应内容
  • 解析HTML表格,提取所有失败计数项
  • 检查是否有计数超过100的项,收集超标信息
  • 若存在超标项,触发邮件告警

完整脚本

@Grab('org.jsoup:jsoup:1.17.2')
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element

pipeline {
    agent any
    stages {
        stage('Check Failure Counts') {
            steps {
                script {
                    // 调用REST API获取HTML内容
                    def response = httpRequest 'REST_API_URI'
                    println("API响应状态: " + response.status)
                    
                    // 解析HTML文档
                    Document doc = Jsoup.parse(response.content)
                    
                    // 存储超标失败项的信息
                    def overThresholdItems = []
                    
                    // 遍历表格中的每一行
                    doc.select("table tr").each { Element tr ->
                        def tds = tr.select("td")
                        if (tds.size() == 2) {
                            def failureName = tds.get(0).text().trim()
                            def countStr = tds.get(1).text().trim()
                            // 转换为整数,处理可能的非数字情况
                            try {
                                def count = Integer.parseInt(countStr)
                                if (count > 100) {
                                    overThresholdItems.add("${failureName}: ${count}")
                                }
                            } catch (NumberFormatException e) {
                                println("无法解析计数: ${countStr}")
                            }
                        }
                    }
                    
                    // 检查是否有超标项,触发邮件告警
                    if (!overThresholdItems.isEmpty()) {
                        def alertContent = "以下失败计数超过阈值(100):\n" + overThresholdItems.join("\n")
                        println(alertContent)
                        
                        // 使用Jenkins邮件插件发送告警(需提前配置邮件服务器)
                        emailext(
                            subject: "Jenkins 失败计数告警",
                            body: alertContent,
                            to: "your-alert-email@example.com"
                        )
                    } else {
                        println("所有失败计数均在阈值范围内")
                    }
                }
            }
        }
    }
}

关键细节说明

  • Jsoup解析:通过doc.select("table tr")定位表格行,再通过td标签提取内容,比字符串分割更稳定,适配HTML格式的微小变化
  • 异常处理:加入NumberFormatException捕获逻辑,避免计数无法转换为整数时脚本直接崩溃
  • 邮件发送:使用emailext插件(需确保Jenkins已安装该插件并配置好邮件服务器),可灵活自定义收件人、主题和告警内容
  • 阈值判断:统一收集所有超标项后再发送告警,避免多次触发邮件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:25:19