0

0

Jenkins中基于HTTP响应内容条件触发邮件通知的实践指南

碧海醫心

碧海醫心

发布时间:2025-12-02 12:48:02

|

946人浏览过

|

来源于php中文网

原创

Jenkins中基于HTTP响应内容条件触发邮件通知的实践指南

本教程详细介绍了如何在jenkins中通过http请求插件获取api的html响应,并利用groovy脚本解析响应内容以提取特定数值。文章将指导读者如何根据提取到的数值设置条件判断,并在满足特定条件(例如数值大于100)时自动触发邮件通知,实现自动化监控与告警。

在现代CI/CD工作流中,根据外部服务状态自动触发监控和告警是确保系统稳定性的关键环节。Jenkins作为强大的自动化服务器,能够周期性地检查外部API响应,并在满足特定条件时执行预设动作,例如发送邮件通知。本教程将深入探讨如何利用Jenkins Pipeline、http_request 插件和Groovy脚本,实现从GET API获取HTML响应、提取其中的数值并基于该数值进行条件判断,最终触发邮件通知的完整流程。

核心步骤一:发送HTTP请求并获取响应

要从Jenkins Pipeline中与外部API进行交互,推荐使用 http_request 插件。请确保该插件已安装在您的Jenkins实例上(通过“管理Jenkins” -> “管理插件” -> “可选插件”进行安装)。安装完成后,您可以在Jenkinsfile(Groovy DSL)中使用 httpRequest 步骤发送GET请求并捕获其响应。

示例代码:

// Jenkinsfile
pipeline {
    agent any
    environment {
        // 定义API URL,便于管理和修改
        API_URL = "http://{Project_IP}/{app_name}/ServiceQueueMonitorServlet?Action=retrieve"
    }
    stages {
        stage('Monitor API') {
            steps {
                script {
                    echo "正在向 ${env.API_URL} 发送GET请求..."
                    // 使用httpRequest插件发送GET请求
                    def response = httpRequest url: env.API_URL, customHeaders: [[name: 'Accept', value: 'text/html']]

                    // 检查HTTP响应状态码,确保请求成功
                    if (response.status != 200) {
                        error "HTTP请求失败,状态码: ${response.status}。响应内容: ${response.content}"
                    }
                    echo "已收到HTML响应:\n${response.content}"
                    // 将响应内容存储到环境变量,以便后续阶段使用
                    env.HTML_RESPONSE_CONTENT = response.content
                }
            }
        }
        // ... 后续解析和通知阶段
    }
}

注意事项:

  • 请将 http://{Project_IP}/{app_name}/ServiceQueueMonitorServlet?Action=retrieve 替换为您的实际API地址。
  • customHeaders 可用于设置请求头,例如指定接受 text/html 类型。
  • 对 response.status 进行检查是良好的实践,可以及时发现请求失败的情况。

核心步骤二:解析HTML响应提取数值

获取到HTML响应内容后,下一步是从中提取我们关注的数值。对于结构相对简单的HTML,Groovy强大的字符串操作功能(特别是正则表达式)足以胜任。

假设的HTML响应示例:


Tag1
502

我们的目标是从

Pi智能演示文档
Pi智能演示文档

领先的AI PPT生成工具

下载
502 中提取 502。

Groovy正则表达式提取示例:

// 承接上一步,env.HTML_RESPONSE_CONTENT 包含了API的HTML响应
// 为了演示,此处直接使用字符串
def responseContent = env.HTML_RESPONSE_CONTENT
def monitoredValue = -1 // 默认值,表示未找到或解析失败

echo "开始解析HTML响应内容..."
// 使用正则表达式匹配紧邻  标签前的  中的数字
// 这个正则表达式会找到  后跟着一个或多个数字,然后是 ,再是可选的空白符,最后是 
def matcher = (responseContent =~ /(\d+)<\/TD>\s*<\/TR>/)
if (matcher.find()) {
    // group(1) 捕获了正则表达式中第一个括号内的内容,即我们想要的数字
    monitoredValue = matcher.group(1).toInteger()
    echo "成功提取到数值: ${monitoredValue}"
} else {
    echo "未能从HTML响应中提取到所需数值,请检查HTML结构或正则表达式。"
    // 在实际应用中,此处可以根据业务需求选择抛出错误或继续以默认值处理
    // error "Failed to parse required value from HTML."
}
// 将提取到的数值存储到环境变量,供后续阶段使用
env.MONITORED_VALUE = monitoredValue

对于复杂HTML结构的处理: 如果HTML结构非常复杂,正则表达式可能难以维护或不够健壮。在这种情况下,可以考虑使用更专业的HTML解析库,例如 Jsoup。然而,在Jenkins Pipeline中引入外部库通常需要Jenkins管理员预先配置(如通过Shared Libraries或在Jenkins沙盒中允许特定类),并可能涉及沙盒安全策略。对于大多数自动化监控场景,精细设计的正则表达式通常能满足需求。

核心步骤三:条件判断与邮件通知

在成功提取到数值后,我们可以根据预设的阈值进行条件判断,并在满足条件时触发邮件通知。Jenkins通过 Mail 插件提供强大的邮件通知功能。请确保 Mail 插件已安装,并且在Jenkins系统配置中正确设置了SMTP服务器。

示例代码:

// 承接上一步,env.MONITORED_VALUE 包含了提取到的数值
pipeline {
    agent any
    environment {
        API_URL = "http://{Project_IP}/{app_name}/ServiceQueueMonitorServlet?Action=retrieve"
        EMAIL_RECIPIENT = "your_email@example.com" // 替换为接收通知的邮箱地址
        THRESHOLD_VALUE = 100 // 定义告警阈值
    }
    stages {
        // ... 前面的API监控和值提取阶段 ...
        stage('Conditional Email Notification') {
            steps {
                script {
                    def currentValue = env.MONITORED_VALUE.toInteger()
                    def threshold = env.THRESHOLD_VALUE.toInteger()

                    echo "当前监控值: ${currentValue},告警阈值: ${threshold}"

                    if (currentValue > threshold) {
                        echo "监控值 ${currentValue} 已超过阈值 ${threshold}。正在发送邮件通知至 ${env.EMAIL_RECIPIENT}。"
                        mail (
                            to: env.EMAIL_RECIPIENT,
                            subject: "Jenkins告警: API监控值超限 (${currentValue})",
                            body: """
                                团队您好,

                                监控的API服务值已超出预设阈值。
                                API URL: ${env.API_URL}
                                当前值: ${currentValue}
                                阈值: ${threshold}

                                请尽快检查服务状态。

                                Jenkins构建链接: ${env.BUILD_URL}
                            """
                        )
                    } else {
                        echo "监控值 ${currentValue} 在可接受范围内 (<= ${threshold})。无需发送邮件。"
                    }
                }
            }
        }
    }
}

注意事项:

  • 请将 your_email@example.com 替换为实际的收件人邮箱地址。
  • mail 步骤的 to、subject 和 body 参数支持Groovy表达式,可以动态插入变量。
  • env.BUILD_URL 是Jenkins提供的内置环境变量,可以直接在邮件内容中引用,方便快速跳转到构建详情页。

完整示例代码

将上述所有步骤整合到一个Jenkinsfile中,即可实现完整的自动化监控和告警流程。

// Jenkinsfile
pipeline {
    agent any
    environment {
        API_URL = "http://{Project_IP}/{app_name}/ServiceQueueMonitorServlet?Action=retrieve" // 替换为您的API地址
        EMAIL_RECIPIENT = "your_email@example.com" // 替换为接收通知的邮箱
        THRESHOLD_VALUE = 100 // 定义告警阈值
    }
    stages {
        stage('Monitor API and Extract Value') {
            steps {
                script {
                    echo "正在向 ${env.API_URL} 发送GET请求..."
                    def response = httpRequest url: env.API_URL, customHeaders: [[name: 'Accept', value: 'text/html']]

                    if (response.status != 200) {
                        error "HTTP请求失败,状态码: ${response.status}。响应内容: ${response.content}"
                    }
                    echo "已收到HTML响应:\n${response.content}"

                    def monitoredValue = -1 // 默认值,表示未找到或解析失败

                    echo "开始解析HTML响应内容..."
                    // 使用正则表达式寻找紧邻  标签前的  中的数字

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

508

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

247

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

724

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

209

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

343

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

230

2023.11.17

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

526

2023.12.06

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.7万人学习

AngularJS教程
AngularJS教程

共24课时 | 2.2万人学习

CSS教程
CSS教程

共754课时 | 17.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号