Jenkins配置邮件通知+钉钉通知,任务构建状态随时掌握

news/2024/5/20 5:35:34/文章来源:https://blog.csdn.net/weixin_43834401/article/details/131048395

1.前言

Hello,各位小伙伴,大家好!!!

在前面的文章中,我们实现了用Maven项目任务和Pipeline流水线任务来完成对项目的自动化部署。

Docker+Jenkins+Gitee自动化部署maven项目

Docker+Jenkins+Gitee+Pipeline部署项目

既然是自动化构建部署,我们肯定不可能时时刻刻都去关注构建面板中任务的构建状态,最好的方式就是,构建完成后,将构建的结果通知到我们,例如邮件通知钉钉通知等。

2.Email通知

Jenkins内置了简单的邮件通知功能供我们使用,同时,也有扩展插件Email Extension来实现功能更全更强大的邮件通知。

2.1 使用Jenkins内置邮件通知

2.1.1 系统配置

话不多说。首先,我们来到系统管理---》系统设置,填写你的邮箱。

然后,继续向下滑动页面,找到邮件通知,进行如下配置。

完成上述配置后,我们可以测试是否配置正确。

如下图所示,说明你已经配置成功了,收件箱会收到如下内容的邮件。

那么,一切准备就绪,接下来,就是把邮件通知加入到任务的构建过程中去。

2.1.2 Maven任务配置

对于构建maven项目的任务来说,我们需要找到构建设置,对配置进行如下调整。

可以看到,内置的Email通知,我们并不能根据任务的执行状态来进行邮件通知。

点击立即构建。

1)构建失败的场景

2)由构建失败转为构建成功的场景

3)上次构建成功,这次依然构建成功

经试验,上次构建成功,这次依然构建成功的情况,并不会发送邮件通知,这应该是Jenkins的机制,既然都构建成功了,也就没有不必再发送邮件通知,而是更多滴将通知聚焦于构建失败的场景,便于运维人员及时应对异常。

2.1.3 Pipeline任务配置

对于pipeline流水线任务来说,在进行配置之前,我们需要了解pipeline的一个语法:post,毕竟只有掌握了用法,我们才能更加游刃有余。

post:字面意思为后置,不妨大胆猜测下,其作用是:在任务执行结束之后才会执行。

没错,我们可以将其定义在pipeline块stage块中,当它们执行完成后,根据执行的状态,来匹配post块中定义的条件,如果匹配,就往下执行。

示例:

pipeline {agent anystages {stage('Example') {steps {echo 'Hello World'}}}post {// always,表示无论当前pipeline的执行状态如何,其都会执行。always {echo 'I will always say Hello again!'}}
}

下面我们来看看常见的匹配条件:

  • always:表示不管其所在作用域的执行状态如何,始终执行。
  • changed:表示当前pipeline的执行状态与上一次不一样时,执行。
  • fixed:表示当前pipeline执行成功且上一次执行失败或不稳定时,执行。
  • aborted:表示当前pipeline被手动中止时,执行。
  • failure:表示其所在作用域的执行状态为失败时,执行。
  • success:表示其所在作用域的执行状态为成功时,执行。
  • unstable:表示当前pipeline的执行状态为不稳定时,执行。

了解了post块的用法之后,我们就可以开始尝试对pipeline脚本进行修改,这里我们需要用到片段生成器。生成的脚本如下:

mail bcc: '', body: 'See ${BUILD_URL}display/redirect;', cc: '', charset: 'UTF-8', from: 'xx@qq.com', mimeType: 'text/html', replyTo: '', subject: 'Build failed in Jenkins: ${JOB_NAME} #${BUILD_NUMBER}', to: 'xx@qq.com'

然后,将其组合到post块中。

// 存在bug的脚本,subject和body中用到的环境变量无法识别
post {// failure:表示在pipeline的执行状态为失败时,执行。failure {mail bcc: '', body: 'See ${BUILD_URL}display/redirect;', cc: '', charset: 'UTF-8', from: 'xx@qq.com', mimeType: 'text/html', replyTo: '', subject: 'Build failed in Jenkins: ${JOB_NAME} #${BUILD_NUMBER}', to: 'xx@qq.com'}
}

可是,经过测试,subject和body中用到的环境变量无法识别。

琢磨许久,感觉应该是个bug。将body和subject对应的值的单引号改为双引号,就可以正确识别了。

post {// failure:表示在pipeline的执行状态为失败时,执行。failure {mail bcc: '', body: "See ${BUILD_URL}display/redirect;", cc: '', charset: 'UTF-8', from: 'xx@qq.com', mimeType: 'text/html', replyTo: '', subject: "Build failed in Jenkins: ${JOB_NAME} #${BUILD_NUMBER}", to: 'xx@qq.com'}
}

2.2 使用Email Extension插件邮件通知

上面,我们实现了使用Jenkins内置的邮件通知功能,唯一不足的点,不能根据任务的执行状态来选择发送邮件通知。想要自定义的小伙伴,可以使用Email Extension插件。

2.2.1 安装插件

首先,我们在系统管理---》插件管理中搜索Email Extension并下载。

2.2.2 添加凭据

然后,我们需要添加一个凭据,用于存储邮箱的用户名和授权码,我这里使用的是qq邮箱。

2.2.3 系统设置

现在,我们就可以去完成最关键的配置了。点击系统管理---》系统设置,找到Extend E-mail Notification,进行如下配置。

2.2.4 Maven任务配置

对于Maven任务,我们需要找到构建后操作,没错,就是任务构建结束要进行的操作。

选择Editable Emial Notification

修改Advanced Settings,在Triggers中选择Failure-Any,并收件人为Recipient List

配置完成后,如果任务构建失败,就会收到如下邮件。

2.2.5 Pipeline任务配置

同样滴,对于Pipeline任务,我们需要使用片段生成器,按自己所需添加条件,生成脚本。

我这里生成的脚本如下。

emailext body: 'See ${BUILD_URL}display/redirect;', mimeType: 'text/html', subject: 'Build failed in Jenkins: ${JOB_NAME} #${BUILD_NUMBER}', to: 'xx@qq.com'

然后,将其组合到post块中。

post {failure {emailext body: 'See ${BUILD_URL}display/redirect;', mimeType: 'text/html', subject: 'Build failed in Jenkins: ${JOB_NAME} #${BUILD_NUMBER}', to: 'xx@qq.com'}
}

如果任务构建失败,就会收到如下邮件。

3.钉钉通知

不知各位小伙伴在办公时使用钉钉的多不,如果使用钉钉,可以在群聊中接入钉钉机器人,当任务构建成功/构建失败时,通知群里的小伙伴,也可谓是除了邮件通知之外的另一种好的方式。

下面,我们就来看看如何使用吧。

3.1 配置钉钉机器人

我这里在创建群聊时,发现,钉钉创建群聊的一个要求是,群成员的人数至少3人,如果只勾选2个成员,点击创建,会直接跳转到对方的聊天窗口,各位小伙伴在创建群聊时注意一下就好。

群聊创建成功后,找到右上角的群设置---》机器人---》添加机器人---》选择自定义

然后,对机器人进行配置,这里我们的安全设置选择加签的方式,会给我们生成用于验签的字符串。

点击完成,就会为我们创建一个钉钉机器人,并给我们生成一个Webhook地址。

3.2 安装插件

在钉钉中,创建好机器人之后,就需要我们在Jenkins中添加相应的插件了。

首先,在系统管理---》插件管理中搜索DingTalk并下载。然后,在系统管理里,在页面的末尾处,找到未分类,就能看到钉钉。

点击钉钉,进行配置。

在配置之后,我们可以点击右下角的测试按钮,测试是否配置正确。正常情况下,在群聊里就会收到一条消息。

我这里遇到一种情况就是,在安装插件后,完善了配置之后,发送测试通知也成功了,但是在任务中配置之后,始终收不到通知,怎么办呢?经过反复地尝试,最后选择了重启Jenkins,没错,问题就成功解决了。不得不赞叹,重启大法好!!!

3.3 Maven任务配置

OK,到这里我们就可以对任务进行配置了。对于Maven任务,找到钉钉机器人选项,添加我们已经设置好的机器人即可。

配置好之后,点击立即构建。

如果构建成功,就会收到如下消息通知。

如果构建失败,就会收到如下消息通知。

3.4 Pipeline任务配置

同样滴,对于Pipeline任务,我们也可以像配置Maven任务一样,直接快捷添加一个钉钉机器人。

当然,我们也可以在pipeline脚本中进行自定义,根据任务的执行状态来发送通知。

我这里使用的是markdown语法的消息类型,用来模仿前面发送的消息的效果。

post {failure {dingtalk (// 创建机器人时生成的idrobot: '71382b7d-2624-48a3-950c-49103f263ef2',// 消息类型type: 'MARKDOWN',title: '[${JOB_NAME}](${JOB_URL})',text: ['### [${JOB_NAME}](${JOB_URL})',// 分割线'---','- 任务:[${BUILD_DISPLAY_NAME}](${BUILD_URL})','- 状态:<font color="red">构建失败</font>'])}
}

接下来,我们来看看消息通知的效果。怎么样?

自我感觉还是比默认消息模板的差点意思啊。

4.后记

各位小伙伴,如果读完文章后觉得有所收获,还请多多支持。

做的不好的地方,希望各位小伙伴能够及时指出,非常感谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_312485.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超级全面的100个思维导图模板

思维导图是一款有效提升生活以及工作的效率工具。使用思维导图有非常多的好处。 思维导图可以用在我们生活的方方面面&#xff0c;以及各种各样的学科中。 接下来给大家分享不同的思维导图模板&#xff0c;希望可以帮助到大家。 一、读书笔记类 1、西游记 2、《战胜拖拉》读…

关于高三经典励志文章精选

关于高三经典励志文章精选 篇一 人要心有所向 曾经有幸被母校邀请回校做演讲。那一次的演讲结束后&#xff0c;接到学弟学妹最多的问题是&#xff1a;为什么我的大学生活很充实&#xff0c;自己也很努力&#xff0c;可毕业之后依旧觉得很迷茫? 我觉得关于迷茫的解答最后都能归…

【Vue】Element Plus和Element UI中插槽使用

文章目录 前言一、两者的区别二、组件库三、具体讲解总结 前言 今天和大家讲一下Element Plus和Element UI这两个组件库中表格的插槽使用方法&#xff0c;一般情况下vue2使用Element UI这个组件库&#xff0c;表格组件的插槽的话一般都是使用v-slot&#xff0c;而vue3使用Elem…

springboot3自动装配机制原理(小白也看得懂)

springbootApplication注解 实现自动装配的核心就是EnableAutoConfiguration。(springboot就是通过此注解实现自动装配机制&#xff0c;主要作用就是让springboot去扫描默认的配置类&#xff0c;如果没有这个类的话&#xff0c;springboot只会默认扫描启动类下包中各个类的注解…

Ofbiz JDK7升级JDK8

1 macros.xml 2 ant.bat 3 ant 4 添加新包,删除旧包 5 报错待修改 5.1 EntityFieldMap.java 在是个模块的build.xml里添加 ![在这里插入图片描述](https://img-blog.csdnimg.cn/28bee1032bcb4c8294f6225dbf1ca74f.png)

推箱子-第14届蓝桥杯国赛Scratch真题初中级组第3题

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第145讲。 推箱子&#xff0c;本题是2023年5月28日上午举行的第14届蓝桥杯国赛Scratch图形化编程初中级组真题第3题&am…

boost 搜索引擎

boost搜索引擎 01 项目演示 done 02 讲解思路 03 项目背景 公司&#xff1a;百度、搜狗、360搜索、头条新闻客户端 - 我们自己实现是不可能的&#xff01; 站内搜索&#xff1a;搜索的数据更垂直&#xff0c;数据量其实更小 boost的官网是没有站内搜索的&#xff0c;需要…

深度学习基础知识-tf.keras实例: 加州房价预测

参考书籍&#xff1a;《Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition (Aurelien Geron [Gron, Aurlien])》 代码有修改&#xff0c;已测通。 简单顺序结构 这次得数据集比之前得简单&#xff0c;只包含数字型特征&#xff0c;没有ocean…

设备指纹系列--前端篇

基础篇请看&#xff1a;设备指纹系列–基础篇 我们接着前文继续写关于设备指纹前端接入方面的内容。话不多说&#xff0c;直接步入正题。 我们会在下文展示5种前端接入的方式&#xff0c;包括web接入、安卓接入、ios接入、微信小程序接入以及支付宝小程序接入。 Web接入 第…

VSCode+GDB+Qemu调试ARM64 linux内核

俗话说&#xff0c;工欲善其事 必先利其器。linux kernel是一个非常复杂的系统&#xff0c;初学者会很难入门。 如果有一个方便的调试环境&#xff0c;学习效率至少能有5-10倍的提升。 为了学习linux内核&#xff0c;通常有这两个需要 可以摆脱硬件&#xff0c;方便的编译和…

Java基础学习+面向对象

一&#xff0c;基础概念介绍 1.1Java跨平台原理&#xff08;一次编译&#xff0c;处处运行&#xff09; Java 源代码经过编译&#xff0c;生成字节码文件&#xff0c;交由 Java 虚拟机来执行&#xff0c;不同得系统有不同得JVM,借助JVM 实现跨平台。就比如说我们在 Windows 下…

【Linux】13. 文件操作

1. 重新认识文件 经过之前的linux命令操作、进程相关概念的学习&#xff0c;我们对于文件也并不陌生 首先需要明确以下概念&#xff1a; 即使是空文件&#xff0c;也要在磁盘当中占据空间文件 文件内容 文件属性文件操作 对文件内容的操作 或者 对文件属性的操作 或者 二者…

ChatGPT训练一次要耗多少电?

如果开个玩笑&#xff1a;问ChatGPT最大的贡献是什么&#xff1f; “我觉得它对全球变暖是有一定贡献的。”知名自然语言处理专家、计算机科学家吴军在4月接受某媒体采访时如是说。 随着ChatGPT引爆AIGC&#xff0c;国内外巨头纷纷推出自己的AI大模型&#xff0c;大家为人工智…

跨境电商独立站搭建-跨境电商源码网站开发部署,独立站技术

跨境电商独立站是指在国际互联网上建立并拥有自己独立的电商网站&#xff0c;在该网站上进行跨境电商业务&#xff0c;包括产品展示、交易处理、支付结算、物流配送等全流程。相较于在第三方平台上开店&#xff0c;跨境电商独立站具有更高的自主权和品牌形象&#xff0c;能够更…

Redis 高级数据结构 HyperLogLog

介绍 HyperLogLog(Hyper[ˈhaɪpə(r)])并不是一种新的数据结构(实际类型为字符串类型)&#xff0c;而是一种基数算法,通过HyperLogLog可以 利用极小的内存空间完成独立总数的统计&#xff0c;数据集可以是IP、Email、ID等。如果你负责开发维护一个大型的网站&#xff0c;有一天…

Java实现Mqtt收发消息

Java实现Mqtt收发消息 文章目录 Java实现Mqtt收发消息windows mqtt 平台服务搭建mqtt 客户端工具&#xff1a;mqttbox整体代码结构mqtt基础参数配置类mqtt客户端连接mqtt接收的消息处理类对应的MqttService注解和MqttTopic注解 MqttGateway 发送消息指定topic接收处理方法 java…

Servlet Cookie基本概念和使用方法

目录 Cookie 介绍 Cookie 主要有两种类型&#xff1a;会话 Cookie 和持久 Cookie。 Cookie使用步骤 使用Servlet和Cookie实现客户端存储的登录功能示例&#xff1a; LoginServlet类 index.jsp 删除Cookie 浏览器中查看Cookie的方法 Cookie 介绍 Cookie 是一种在网站和…

测试老鸟总结,自动化测试难点挑战应对方法,我的进阶之路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python自动化测试&…

不定积分练习

不定积分练习 在看视频的时候遇到了一道比较有趣的题&#xff0c;在这里给大家分享一下。 题目 计算 ∫ ( 1 x − 1 x ) e x 1 x d x \int(1x-\dfrac 1x)e^{x\frac 1x}dx ∫(1x−x1​)exx1​dx 解&#xff1a; \qquad 原式 ∫ e x 1 x d x ∫ x ( 1 − 1 x 2 ) e x 1…

Promise-用法

目录 1.处理异步的几种方案 2.理解 3.promise状态&#xff1a;初始化 4.执行异步任务 5.执行异步任务成功 6.执行异步任务失败 7.执行异步任务成功-返回 8.执行异步任务失败-返回 1.处理异步的几种方案 纯粹callback&#xff0c;会剥夺函数return的能力promise&#xf…