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

news2024/11/26 14:29:12

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 any
    stages {
        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 (
            // 创建机器人时生成的id
            robot: '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.coloradmin.cn/o/616022.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0001欧几里得算法

首先我们先了解欧几里得这个人。俗话说&#xff1a;不了解一个人&#xff0c;很难走进他的思想。欧几里得是约公元前330年~公元前275年的古希腊数学家&#xff0c;被称为“几何之父”。《几何原本》就是他的著作。而欧几里得算法是《几何原本》中的一个用于求两个数的最大公约数…

以AI为灯,照亮医疗放射防护监管盲区

相信绝大部分人都有在医院拍X光片的经历&#xff0c;它能够让医生更方便快速地找出潜在问题&#xff0c;判断病人健康状况&#xff0c;是医疗诊断过程中的常见检查方式。但同时X射线也是一把双刃剑&#xff0c;它的照射量可在体内累积&#xff0c;对人体血液白细胞有杀伤力&…

mysql加索引,数据库卡死

公司的一个内部项目&#xff0c;由于突然导入了几十万的数据&#xff0c;数据量翻了一倍&#xff0c;导致了某个页面打开很慢。通过sql日志看到主要是由于慢查询引起的&#xff0c;通过explain这个sql&#xff0c;发现主要是由于这个SQL没有命中索引&#xff0c;进行了全表扫描…

原型模式的用法

文章目录 一、原型模式的用法1.1 介绍1.2 结构1.3 原型模式类图1.4 实现1.4.1 克隆的分类1.4.2 代码 1.5 "三好学生"奖状案例1.5.1 "三好学生"奖状类图1.5.2 代码 1.6 深、浅克隆的区分1.6.1 浅克隆1.6.2 深克隆 一、原型模式的用法 1.1 介绍 用一个已经…

STL(结)

STL&#xff08;结&#xff09; map存储结构基本操作equal_range遍历方式 插入 multimapsetunordered_mapmap和无序map的异同mapunordered_map map 存储结构 map容器的底层存储是一个红黑树&#xff0c;遍历方式都是按照中序遍历的方式进行的。 int main() {std::map<int…

数组降维

写一个函数&#xff0c;打印数组内的内容&#xff0c;代码为&#xff1a; #include<stdio.h>void show_arr(int arr[], int num) {int i 0;for (i 0; i < num; i){printf("%d ", arr[i]);}printf("\n"); } int main() {int arr[] { 1,2,3,4,5…

Servlet Cookie基本概念和使用方法

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

win10下载安装mysql8.0版本

打开官网下载&#xff1a;https://dev.mysql.com/downloads/mysql/ 下载完成后解压&#xff0c;这里我是直接放在C盘 然后打开mysql目录文件夹新建my.ini文件,my.ini文件内容如下&#xff0c;需要修改两个地方&#xff0c;其中datadir你自己的mysql的安装目录&#xff0c;data…

如何在线压缩png图片?png压缩图片大小的方法介绍

压缩PNG图片大小的优点 随着数字化时代的发展&#xff0c;PNG格式已成为一种常见的图片格式。然而&#xff0c;由于高分辨率、高色深等原因&#xff0c;PNG图片通常具有较大的文件体积&#xff0c;导致在传输、存储和网页加载等方面会产生不必要的负担。因此&#xff0c;对于需…

ai绘画生成古风场景怎么弄?告诉你怎么ai绘画

随着人工智能技术的不断发展&#xff0c;ai绘画已经成为一个令人着迷的领域。一些软件利用深度学习算法和生成对抗网络等技术&#xff0c;能够帮助艺术家和爱好者创造出令人惊叹的艺术作品。今天我就来跟大家分享一下如何一键ai绘画&#xff0c;感兴趣的朋友就跟我一起看下去吧…

《文体用品与科技》期刊简介及投稿要求

《文体用品与科技》期刊简介&#xff1a; 主管单位&#xff1a;中国轻工业联合会 主办单位&#xff1a;中国文教体育用品协会、全国文教体育用品信息中心、北京市文教体育用品研究所 国际刊号&#xff1a; ISSN1006-8902 国内刊号;CN:11-3762/TS 邮发代号;82-21932 发表周…

DDR跑不到速率后续来了,相邻层串扰深度分析!

高速先生成员&#xff1a;黄刚 就在刚刚&#xff0c;雷豹把他对叠层的调整方式和改善后的仿真结果给师傅Chris看完后&#xff0c;Chris给雷豹点了个大大的赞&#xff0c;因为优化的方式其实不需要大改DDR的走线&#xff0c;只需要把相邻层的信号最大限度的拉开&#xff0c;同时…

如何定位分析视频异常画面

背景 视频典型画面不正常主要包含画面卡顿、画面模糊、画面不显示、画面花屏这 4 类问题。本文主要介绍的是画面花屏的情况&#xff0c;这里的画面花屏包含了花屏、闪屏、绿屏、黑屏。视频花屏是多媒体工程师最常见的问题之一&#xff0c;也是最棘手的问题之一&#xff0c;笔者…

有什么可靠稳定的微信管理系统?

微信管理系统是什么 微信管理系统从字面上来说可以理解为微信的管理和营销系统。通俗一点来说就是利用微信与管理营销相结合的一种新型办公方式。 不用下载任何软件&#xff0c;不用多部手机&#xff0c;对手机没有任何型号要求&#xff0c;不需要刷机、越狱&#xff0c;不需…

政务APP小程序开发 畅享全新政府办事体验

现在很多政府机构打着便民的口号&#xff0c;但其实生活中很多时候去政府机构办事都很费时间&#xff0c;周末节假日不上班没法办理&#xff0c;工作日去人多排长队不说&#xff0c;往往排到自己了又因为资料不全、手续不齐&#xff0c;无法证明自己等奇葩原因不得不一次次被拒…

boost 搜索引擎

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

家乡乐山美食网站系统(含源码+数据库)

1.需求分析 将进行家乡乐山美食网站的需求分析。需求分析是系统开发过程中的一项重要工作&#xff0c;它是对用户需求进行深入研究和分析&#xff0c;明确系统的功能、性能、界面等方面的需求&#xff0c;为后续的设计和开发提供依据。 首先&#xff0c;需要明确该网站的主要目…

成为一个优秀的测试工程师需要具备哪些知识和经验?

目录 前言&#xff1a;  1、我们先来讲第一点&#xff0c;由单纯的测试变成项目质量保证工作 2、持续集成探索和自动化测试技术研究 3、测试相关工具的开发 总结忠告 前言&#xff1a;  本人7年测试经验&#xff0c;在学测试之前对电脑的认知也就只限于上个网&#xff0c;…

狂野java前置课程-线程池的基本使用

回顾 什么是线程&#xff0c;什么是进程&#xff1f; 进程&#xff1a;是一个应用程序&#xff0c;里面包含很多线程线程&#xff1a;进程执行的基本单元 java实现线程的几种方式 继承Thread类实现Runable接口 线程的生命周期 执行线程会出现的问题 一个线程只能执行一个…

【专为苛刻的数据环境而构建】上海道宁为您带来世界上先进的矢量原生、时间序列和实时分析数据库——kdb系列产品

kdb是高效的矢量原生 时间序列和实时分析数据库 专为高性能矢量 数据驱动的应用程序而构建 以加速云端、数据仓库和 数据湖中的 AI 和 ML 工具 从而更快、更高效地 制定业务决策 使用数据时间库加速数据 分析和生成 AI 管道 以降低成本 提高性能并提高效率 开发商介绍…