基于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
相关产品推荐
相关产品推荐

