持续集成08--Jenkins邮箱发送构建信息及测试报告
前言
在持续集成(CI)和持续部署(CD)的自动化流程中,及时通知团队成员关于构建的成功或失败是至关重要的。Jenkins,作为强大的CI/CD工具,提供了多种通知机制,其中邮件通知是最常用且有效的手段之一。本章节“持续集成08--Jenkins配置邮箱发送构建信息”将详细介绍如何在Jenkins中配置邮件发送功能,包括SMTP服务器的设置、邮件内容的自定义以及触发邮件发送的条件等,帮助团队实现更加高效和及时的沟通。
1、设置发送者邮箱
进入Manage Jenkins--System--Jenkins Location,系统管理员邮件地址填写自己的邮箱
2、系统邮箱通知配置(qq邮箱为例)
2.1、邮箱授权
首先进行qq邮箱授权,qq授权码:登录qq邮箱,进入设置--账号--POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,开启服务,按照提示的验证方式进行授权验证,生成授权码;授权码记得记录下来,关闭后不可再次进行查看。
2.2、配置邮箱
进入Manage Jenkins--System--邮箱通知,填写内容如图所示;打开高级,SMTP认证用户名要和我们上面设置的发送者邮箱一致,密码不是我们qq邮箱密码,不是qq邮箱密码,不是qq邮箱密码;此处密码填写上面我们生成的qq授权码;然后勾选使用SSL协议,端口改成465。
2.3、测试邮箱发送
配置完毕后可以勾选通过发送测试邮件测试配置,Test e-mail填写邮箱地址,点击右下角Test,如果出现成功则说明配置完成,可以到QQ邮箱查看接收到的邮件。
3、系统配置邮箱扩展
3.1、安装插件
Jenkins安装插件:Email Extension
3.2、配置扩展
进入Manage Jenkins--System,找到Extended E-mail Notification,此处配置和我们邮件通知配置相似,打开高级,凭证添加方式和之前一样,用户名是qq邮箱,密码不是qq邮箱密码,不是qq邮箱密码,是qq邮箱授权码
3.3、开启Debug模式
配置完后建议勾打开Enable Debug Mode,在我们构建时可以在日志输出页面打印出邮件相关日志,便于我们排查信息,流程走通后可以再关掉
4、项目邮箱通知配置
4.1、开启邮箱通知
进入项目配置页,在最后增加构建后操作步骤,选择Editable Email Notification;
4.2、添加默认接收人
在Editable Email Notification内先为项目添加一个默认接收人
4.3、选择发送条件
打开高级设置(Advanced Settings)--打开Adding Trigger--选择always(表示构建发送邮件,其他选项包含构建成功发送、构建失败发送等,根据自己需求进行选择)
4.4、添加接收人员
Sent To表示发送对象,这里选择的是开发人员和接收人员
4.5、配置发送内容
打开高级
Recipient List(接收者列表):多个接收者用逗号隔开
Content Type(邮件内容格式):选择html
Subject(邮件主题):$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!,此模板包含项目名、jenkins构建编号、构建状态;
Content(邮件内容,下面使邮件模板):
$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif"> <tr> <br/> 本邮件由Jenkins系统自动发出,无需回复!<br/> 各位同事,大家好,以下为${PROJECT_NAME }项目构建信息</br> </tr> <tr> <td><br /> <b><font color="#0B610B" style="font-size: 11pt">构建信息</font></b> <hr size="2" width="100%" align="center" /></td> </tr> <tr> <td> <ul style="font-size: 11pt"> <li>项目名称: ${PROJECT_NAME}</li> <li>构建编号: 第${BUILD_NUMBER}次构建</li> <li>触发原因: ${CAUSE}</li> <li>构建状态: ${BUILD_STATUS}</li><li>系统Allure测试报告:<a href="${PROJECT_URL}${BUILD_NUMBER}/allure">${PROJECT_URL}${BUILD_NUMBER}/allure</a></li> <li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li> <li>构建地址: <a href="${BUILD_URL}">${BUILD_URL}</a></li> <li>项目地址: <a href="${PROJECT_URL}">${PROJECT_URL}</a></li> </ul> <h4><font color="#0B610B" style="font-size: 11pt">失败用例</font></h4>
<hr size="2" width="100%" />
$FAILED_TESTS<br/><h4><font color="#0B610B" style="font-size: 11pt">最近提交</font></h4>
<hr size="2" width="100%" />
<ul style="font-size: 11pt">
${CHANGES_SINCE_LAST_SUCCESS, reverse=true, format="%c", changesFormat="<li>%d [%a] %m</li>"}
</ul>
详细提交: <a href="${PROJECT_URL}changes" style="font-size: 11pt">${PROJECT_URL}changes</a><br/></td> </tr> </table>
</body>
</html>
4.6、构建项目
配置完成便可进行项目的构建,测试邮件接收情况,若出现接收不到邮件的情况,构建过程中查看日志输出信息,根据失败原因定位问题
5、 邮件发送allure报告附件
在构建完成后邮件内容只有查看报告的链接,无法离线查看,我们可以将allure报告文件夹压缩后作为附件,然后进行下载查看。
5.1、附件配置
路径较深,仔细找:进入到项目配置页--找到Editable Email Notification--最下面打开Advanced Settings--Triggers栏,打开高级,也就是我们配置邮件模板的下面,找到Attachments; Attachments(附件):需要在工作空间相对路径目录下的文件,不能填写绝对路径,否则找不到文件;点击the workspace可以查看工作空间,这个路径就是我们代码目录,附件可以填写allure报告文件;
5.2、压缩文件
一般发送附件为压缩文件,而非文件夹,但是我们目录下并没有压缩文件,于是我就想着将allure报告文件夹压缩后再进行附件的发送;但是Jenkins构建后操作并不能添加shell脚本,需要安装插件post build task进行构建后执行shell脚本,压缩allure报告
安装好插件后进入到项目配置页,拉到最后增加构建后操作步骤,选择post build task
Script栏添加压缩allure报告文件夹的shell脚本,注意:此步骤要移动到生成allure report和发送邮件Editable Email Notification步骤的中间,也就是说生成报告,进行压缩,然后再发送邮件
#!/bin/bash
# 压缩allure_report
zip -r allure_report.zip allure_report/
保存后构建项目,可以看到附件来了
6、allure报告离线查看
附件是可以发送了,但是下载的附件解压后会发现index.html页面加载不到数据。这次因为allure报告需要allure服务才能进行查看,直接打开是无法查看的。
6.1、allure报告离线查看方式一
创建文件一个后缀名为.bat文件,在文件内写入以下内容,然后将这个文件放到我们解压出来的报告所在文件夹下,通过双击运行这个bat文件来打开报告页面。如果内部使用,可以将创建好的.bat文件提前发送给使用人,然后让他放到报告文件夹下。
:: 【本地环境无法打开allure报告,此文件主要解决在本地打开allure报告】
@echo offif "%1" == "h" goto beginmshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit:begincd ..:: 【注意:这里的 allure_report 替换成你自己报告文件夹的名字】allure open allure_report
6.2、allure报告离线查看方式二(未成功)
通过单独发送bat文件的方式需要告知接收方,如何创建bat文件与使用,有点麻烦;于是我在想如果将bat文件放到我们的项目代码中,生成报告后将bat文件复制到allure报告文件夹内,然后再进行压缩,作为附件发送给接收方,这样就不用让接收方做额外的操作了。
开始行动: 首先将bat文件创建好,放到我们的代码中(注意:linux环境不要使用中文,要用英文名);然后进入到Jenkins项目配置页,找到post build task,在shell命令压缩文件前添加复制bat文件到报告内的命令,然后保存,构建项目
# 将bat文件添加到allure报告中,使其可以在其他设备查看allure报告
cp -r ./open_report.bat ./allure_report/
保存后进行构建,接收到邮件下载附加后解压,通过bat文件运行打开allure报告。。。
然而我无法运行,打不开报告,系统卡死!!!经过各种排查,发现我从本地将bat推送到gitee这一步就不行了;本地原文件可以打开报告,上传到gitee,再从gitee下载下来这个bat就打不开报告了,这从源头就给我按死了,至今未解决,甚是不解啊。。。
总结:我目前只能通过方式一来进行实现了,将bat文件单独发送给接收方,让接收方放到allure报告内查看;方式二是一个优化的思路,感兴趣的朋友可以尝试方式二是否正常,如果能实现这套流程还是非常nice的;然而,我放弃。。。后续有解决方法了再来更新吧
总结
通过本章节“持续集成08--Jenkins配置邮箱”的学习,可以基本掌握在Jenkins中配置邮件发送功能的关键步骤。从SMTP服务器的配置到邮件内容的自定义,再到触发邮件发送的条件设置,每一步都详细阐述了如何操作。现这将大大提升团队的响应速度和协作效率,为持续集成和持续部署流程的顺利进行提供有力保障。同时,通过自定义邮件内容,还可以根据实际需求调整通知的详细程度和格式,使团队成员能够更加清晰地了解构建状态和需要采取的行动。
相关文章:
持续集成08--Jenkins邮箱发送构建信息及测试报告
前言 在持续集成(CI)和持续部署(CD)的自动化流程中,及时通知团队成员关于构建的成功或失败是至关重要的。Jenkins,作为强大的CI/CD工具,提供了多种通知机制,其中邮件通知是最常用且有…...
专题四:设计模式总览
前面三篇我们通过从一些零散的例子,和简单应用来模糊的感受了下设计模式在编程中的智慧,从现在开始正式进入设计模式介绍,本篇将从设计模式的7大原则、设计模式的三大类型、与23种设计模式的进行总结,和描述具体意义。 设计模式体…...
基于X86+FPGA+AI数字化医疗设备:全自动尿沉渣检测仪
助力数字医疗发展,信迈可提供全自动尿沉渣检测仪专用计算机 随着信息技术的不断进步,医疗也进入了一个全新的数字化时代。首先是医疗设备的数字化,大大丰富了医疗信息的内涵和容量,具有广阔的市场发展前景。 数字化医疗设备&…...
vue2导入elementui组件库
第一步安装 npm i element-ui -S 第二步在main.js中导入 第三步使用然后在运行项目...
Django定时任务框架django-apscheduler的使用
1.安装库 pip install django-apscheduler 2.添加 install_app django_apscheduler 3.在app下添加一个task.py文件,用来实现具体的定时任务 task.pydef my_scheduled_job():print("这个任务每3秒执行一次", time.time()) 4.在app下创建一个manag…...
知识库文档处理,word转markdown
前一篇我讲解了如何对接MiniMax实现FAQ,其实知识库不仅仅可以实现FAQ,还能实现帮助文档的查询,内部培训资料的查询等等,但是这些培训资料大部分是word版本的,并且有层级结构,比如标题1,标题1-1等…...
TF和TF-IDF区别和联系
TF(Term Frequency)和TF-IDF(Term Frequency-Inverse Document Frequency)都是用于文本挖掘和信息检索的统计方法,用于评估一个词在文档或文档集合中的重要性。 一.TF(Term Frequency) 1.定义…...
02线性表 - 链表
这里是只讲干货不讲废话的炽念,这个系列的文章是为了我自己以后复习数据结构而写,所以可能会用一种我自己能够听懂的方式来描述,不会像书本上那么枯燥和无聊,且全系列的代码均是可运行的代码,关键地方会给出注释^_^ 全…...
高性能、安全、低碳绿色的趋势下,锐捷网络发布三擎云办公解决方案 3.0
桌面虚拟化作为云时代的主流和热门技术,已经取得了广泛应用。随着生成式 AI 爆炸式发展,CSDN 看到,人工智能正在引发计算、开发、交互三大范式的全面升级,技术开发或将迎来一次全新的科技变革周期,因此 VDI 云桌面随之…...
python3 shutil排除特定或者模糊匹配文件或目录
import shutil import fnmatchdef ignore_files(dir, files):# 定义要忽略的模式ignore_patterns = [file2.txt, dir2, *复制*.py]ignore_list = []<...
Spire.PDF for .NET【文档操作】演示:如何在 C# 中切换 PDF 层的可见性
我们已经演示了如何使用 Spire.PDF在 C# 中向 PDF 文件添加多个图层以及在 PDF 中删除图层。我们还可以在 Spire.PDF 的帮助下在创建新页面图层时切换 PDF 图层的可见性。在本节中,我们将演示如何在 C# 中切换新 PDF 文档中图层的可见性。 Spire.PDF for .NET 是一…...
新文件覆盖旧文件还能复原吗?八大excel文档修复软件免费
新文件覆盖旧文件还能复原吗?文件操作失误,尤其是新文件意外覆盖旧文件的情况时有发生,面对文件被覆盖的情况,我们不仅需要冷静应对,更需要掌握一系列有效的恢复策略。本文将深入探讨八种免费方法,旨在帮助…...
Android 10.0 Launcher3拖拽图标进入hotseat自适应布局功能实现一
1.前言 在10.0的系统rom定制化开发中,在对于launcher3的一些开发定制中,在对hotseat的一些开发中,需要实现动态hotseat居中 的功能,就是在拖拽图标进入和拖出hotseat,都可以保持hotseat居中的功能,接下来分…...
彻底解决idea的编解码问题
一、打开idea,找到Setting,点击File Encoding编解码设置,将以下标红的三个部分全部设置为UTF-8.同理如果你的项目使用的是GBK或者其他编码格式,那么也设置为统一。 二、点击Java Compiler设置补齐-encoding utf-8参数 三、如果你的项目使用到…...
仅两家!云原生向量数据库 PieCloudVector 全项通过信通院「可信数据库」评测
7月16日,2024 可信数据库发展大会在北京隆重举行。大会以“自主、创新、引领”为主题,近百位数据库领域的专家、学者齐聚一堂,带来高质量的数据库技术洞察与实战经验。 本次可信数据库发展大会中,中国信通院正式公布 2024 年上半年…...
vue使用x6画流程图,简单使用
官网 https://x6.antv.antgroup.com/tutorial/getting-started 安装 npm install antv/x6 --save 使用 <template><div>3333<div id"container" style"width: 800px;height: 800px;"></div></div> </template> <…...
低代码中间件学习体验分享:业务系统的创新引擎
前言 星云低代码平台介绍 星云低代码中间件主要面向企业IT部门、软件实施部门的低代码开发平台,无需学习开发语言/技术框架,可视化开发PC网页/PC项目/小程序/安卓/IOS原生移动应用,低门槛,高效率。针对企业研发部门人员少&#…...
阿里云ACP云计算高级攻城狮通用知识
🔥概述 阿里云云计算高级工程师ACP认证是面向使用阿里云云计算产品的架构、开发、运维类人员的专业技术认证,主要考核考生利用阿里云云计算技术服务体系设计稳定、安全、高性能、易扩展、低成本的企业云计算架构的能力。 前提:在写适用人群…...
log4js node日志插件
最近不是特别忙在用express搭建后台项目,在开发过程中遇到了需要输入日志的问 本来想直接用node自带的console来实现,后来发现console输出的日志达不到自己希望的 日志格式,后来各种百度发现了log4js插件,本文来记录log4js插件使用…...
【MQTT(3)】开发一个客户端,QT-Android安卓手机版本
手机版本更加方便 生成安卓库 参考了这个代码 在编译Mosquitto以支持安卓平台时,主要涉及到使用Android NDK(Native Development Kit)进行交叉编译。环境的准备参考之前的博客【QT开发(17)】2023-QT 5.14.2实现Andr…...
大数据之数据抽取架构演变过程
架构演变之Flink架构的演变过程 一、 起初搭建整个大数据平台是基于CDH这一套资源管理和整合的CM资源管理器搭建的 整个平台包括了: HDFS,YARN,HIVE,zoozie,FLINK,Spark,Zookeeper等组件搭建而成, 刚开始搭建的时候&am…...
[web]-反序列化-绕过__wakeup(转)
BUUCTF-[极客大挑战 2019]PHP1_[极客大挑战 2019]php 1-CSDN博客 <?php include flag.php;error_reporting(0);class Name{private $username nonono;private $password yesyes;public function __construct($username,$password){$this->username $username;$this-…...
B树与B+树的区别
B树和B树都是用于数据库和文件系统的平衡树数据结构,但它们有一些显著的区别: 节点结构: B树:每个节点存储数据和指向子节点的指针。叶子节点也包含数据。 B树:内部节点只存储索引值,不存储实际数据。所有…...
机器人开源调度系统OpenTCS-6最新版本地源码运行
OpenTCS 项目使用 Gradle 而不是 Maven,那么需要使用 Gradle 来导入和构建项目。在 IntelliJ IDEA 中导入和运行使用 Gradle 的项目,可以按照以下步骤进行操作: 克隆 OpenTCS 源码 首先,克隆 OpenTCS 的源码到本地。您可以使用以…...
云监控(华为) | 实训学习day3(10)
实现数据的增删改查 SpringBoot框架模式 向送外卖一样理解 写程序 1、准备食材(java bean) 2、菜谱(pojo接口->预制->sql 语句) 3、service处理 4、controller 派送 5、用户请求->页面 一、Spring Boot实现增加 第一步:食材(表),用户增加,这里还是用户…...
springMVC前后端请求参数绑定和传递
目录 请求参数的绑定 当绑定参数是基本数据类型和字符串类型时,要注意: 当绑定参数是实体类型(JavaBean)要注意: 给集合属性数据封装,要注意: 绑定参数是日期类型,如何封装: 代码实例: 实体类1&#…...
【iOS】—— 消息传递和消息转发
【iOS】—— 消息传递和消息转发 1. 消息传递SEL选择子IMP快速查找汇编代码查找过程总结消息转送快速查找IMP 慢速查找总结消息传递慢速查找IMP 2. 消息转发动态决议动态解析添加方法 快速转发慢速转发 总结动态决议消息转发消息的三次拯救 1. 消息传递 在iOS中,消…...
【Node.js】初识 Node.js
Node.js 概念 Node.js 是一个开源与跨平台的 JavaScript运行时环境 ,在浏览器外运行 V8 JavaScript 引擎(Google Chrome的内核),利用事件驱动、非阻塞和异步输入输出 等技术提高性能。 可以理解为 Node.js就是一个服务器端的、非阻塞式 l/O 的、事件驱…...
AWS backup服务和 RDS snapshot的关系
首先,其实RDS的snapshot,自动备份和手动备份,就是调用的AWS backup服务,只不过是通过RDS控制台,API等等进行控制和管理的。 1. AWS backup 服务对于RDS的备份来说包括两部分: --连续备份(需要…...
PDF转Word怎么快速转换?格式转换技巧分享
PDF文件和Word文档是我们日常工作中不可或缺的文件格式,同时文件之间的格式转换也十分常见。不同的格式有着不同的优点,将PDF文件改为Word文档后,在编辑或修改文件内容时更为方便。 下面小编就来给大家介绍几种常用的PDF转Word的转换方法&am…...
在哪建网站/深圳广告策划公司
如何设计自动化测试用例或脚本?自动化始终遵循手动测试。通常,将在AUT上执行一轮或多轮手动测试。这意味着手动测试用例已经存在并且已经执行了至少一次。例如,假设以下是您的手动测试用例。它只是登录到Gmail.com网站。现在,这看…...
公司做网站需要备案吗/想在百度做推广怎么做
第一种:使用伪元素transform:translateX(-100%);原理是设置文本居中,给定两个伪元素,分别绝对定位,那么此时伪元素也是跟随着水平居中的,设置的宽度,然后把左边的往左位移100%就可以了,父元素超…...
合肥网页网站制作/为企业推广
利用Servlet3.0能够轻松写出一个博客系统,主要是把数据存入数据库与从数据库读出数据怎么推向前台的问题。本章将会以一个博客系统来说明,如何利用JSTL表达式把Servlet从数据库读出的数据推向前台。将会利用网页文本格式编辑器xheditor与EL表达式基于Ser…...
火花机 东莞网站建设/百度网首页官网登录
本例是模仿vue.js中todoMVC的功能,使用jQuery进行开发,第一版的jQuery会显得有些混乱,后续将进行优化。 todoMVC具有添加、修改、删除、更改状态、分类等操作todos的功能。我的开发过程分为了以下几个步骤。 将整个应用进行功能拆分分别实…...
一个公司可以做几个网站备案/百度统计api
夜光序言: “姑娘的哀愁如烟似画” “小生可否斗胆奢求姑娘笑颜如花” 正文:九九乘法表输出。工整打印输出常用的九九乘法表,格式不限~~ for i in range(1,10): for j in range(1,i1): print("{}*{}{:2} ".format(j,i,i*j), end…...
做网站标题代码/上海排名优化seobwyseo
clamp函数用于约束返回值到A和B之间,若value小于min,则返回min;若value大于max,则返回max,起到上下截断的作用。 以下内容转载自:https://blog.csdn.net/u013230189/article/details/82627375,…...