今天分享服务搭建第四篇:Jenkins设置Gitlab邮件服务详解
前言:
此笔记内容紧接着《篇二、Jenkins+Jmeter+Ant自动化集成(服务)》配置后的操作,
此笔记仅配置Jenkins集成Gitlab中用到的邮件提醒和测试报告发送功能。
————————————————-
-
全局配置
一、Jenkins Location配置
系统管理员邮件地址一定要写,因为这个地址是邮件通知的发信人邮箱,填写方式有两种:
1、直接填写邮箱地址
2、加前缀来标识该邮件基本信息,例如:自动化测试邮件<邮箱地址>

二、Extended E-mail Notification配置

OK,邮箱服务的基本配置已经完成。
接下来的配置相当于是邮件通知的全局配置,对具体job来说,还会进行具体的配置,如果在job中重新配置了这里相同的项目,就会覆盖这里的全局配置。

Default Content Type:
“text/plain”指邮件正文为纯文本格式,“text/html”指邮件内容可以包含html标签且能被邮箱客户端正确解析、显示,这里选择“text/html”。
Default Subject:
邮件标题,可以使用系统中的全局邮件变量来设置。我这里设置的标题格式为:项目名称-BUILD#构建次数-构建状态。
勾选“Enable Debug Mode”
,以开启Extended E-mail Notification的调试功能,这样可以在构建日志中增加更多与Extended E-mail Notification相关的日志。

Default Triggers : Always 只要进行JOB任务 Build操作,就会发邮件。
三、邮件通知

ok,至此,全局设置已经配置完成!
-
JOB配置
一、Email Notification
邮件通知,每次不稳定的构建都会发给的收件人

二、Editable Email Notification (重点在于每次都发送测试报告到邮箱)

需要填写的各配置项参数说明:
1) Project Recipient List:这是一个以逗号(或者空格)分隔的收件人邮件的邮箱地址列表。
2)
Default Content
:邮件内容,可以使用构建中的环境变量,使得邮件中展示你想要的信息。
完整内容:
<!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>
<td>(本邮件是程序自动下发的,请勿回复!)</td>
</tr>
<tr>
<td><h2>
<font color="#0000FF">构建结果 - ${BUILD_STATUS}</font>
</h2></td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称 : ${PROJECT_NAME}</li>
<li>构建编号 : 第${BUILD_NUMBER}次构建</li>
<li>触发原因 : ${CAUSE}</li>
<li>构建日志 : 请查看附件</li>
<li>测试报告 : 请查看附件</li>
<li>变更集:${JELLY_SCRIPT,template="html"}</li>
<li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
</ul>
</td>
</tr>
<tr>
<td><b><font color="#0B610B">Changes Since Last
Successful Build:</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
</ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat=" %p"}
</td>
</tr>
</table>
</body>
</html>
*******************************************************************************************************************
3)
Attachments:邮件的附件,我把执行测试脚本生成的html测试报告文件,作为附件随邮件发出去。
注意:这里的写法可以使用通配符来确定文件的路径名称等,但是文件一定要位于workspace目录里面。
由于之前的job把测试报告放置在/usr/local/apache-jmeter-3.1/reports/html 路径下,所以现在要修改一下测试报告输出的路径:
首先确认workspace目录的路径:/var/lib/jenkins/workspace;
接着在workspace/Interface_automation_gitlab/目录下创建存放测试报告的新文件夹:
/var/lib/jenkins/workspace/Interface_automation_gitlab/TestReports/html
/var/lib/jenkins/workspace/Interface_automation_gitlab/TestReports/jtl
最后修改/usr/jmeter/apache-jmeter-3.3/extras目录中的build.xml文件,把其中测试报告的输出路径修改为新的路径即可。
<!-- 此配置用于Jenkins中自动发送报告的位置,位于Jenkins仓库下的Job目录 -->
<!-- jmeter生成jtl格式的结果报告的路径-->
<property name="jmeter.result.jtl.dir" value="/var/lib/jenkins/workspace/Interface_automation_gitlab/TestReports/jtl" />
<!-- jmeter生成html格式的结果报告的路径-->
<property name="jmeter.result.html.dir" value="/var/lib/jenkins/workspace/Interface_automation_gitlab/TestReports/html" />
该参数文本框填写内容为html/*.html,意为在该job的workspace路径下搜索html文件夹中所有以.html为后缀的文件,并把这些文件添加到邮件附件中。

4) Attach Build Log 选择”Attach Build Log”,每次build都会发送构建日志到邮箱附件。

5)job中的触发器配置
决定什么情况下发送邮件,配置为Always总是触发,接着send to选择RecipientList,意思是每次构建无论成功与否都发送邮件到上面指定的收件人列表邮箱。


这里 的Attachments 是不需要填写的,如果写了会发两个相同的报告到邮件附件。
三、测试配置是否成功

四、邮件通知优化
-
问题描述
:
触发几次构建就会发现问题,随着构建次数越来越多,产生的测试报告也越来越多,即.html文件会越来越多,而每次构建的邮件通知都会把所有的.html文件添加到附件,这样用户收到的自动化测试邮件里面,不仅能看到本次构建的测试报告,还可以看到之前所有构建的测试报告,体验非常不好。
-
解决思路:
在每次构建前删除掉上次构建产生的测试报告文件,使得添加附件时,只能在html文件夹中搜索到本次构建的测试报告。
-
解决方案
方案一
job->配置->构建->增加构建步骤
在Invoke Ant构建前,我们添加一个构建步骤“Execute shell”

rm -f /var/lib/jenkins/workspace/Interface_automation_gitlab/TestReports/html/*.html
rm -f /var/lib/jenkins/workspace/Interface_automation_gitlab/TestReports/jtl/*.jtl
特别注意:
Execute shell 执行模块,一定要拖到Invoke Ant 上面,否则是先构建在删除报告,这样测试报告就无法放附件了。顺序如下:

方案二
job->配置->构建环境->Delete workspace before build starts

构建环境我勾选了”Delete workspace before build starts”,在具体解释这一步配置之前,我先说一下workspace在目前这个平台中起到什么作用:
首先,我们在jenkins每创建一个新的job,系统就会在jenkins的安装目录下的workspace文件夹下创建一个以job name命名的文件夹;
接着,由于邮件通知添加附件的问题,我们手动把测试报告的输出位置移动到这个job name命名的文件夹下面,也就是经常提到的html文件夹的位置;
希望下面两张图能够加深对他的理解:


我们可以使用ANT语法指定一种模式来筛选出要被删除的文件:
(1)下拉选择框有两种模式Include和Exclude
Include模式:如果文件匹配语法要求删选条件,则文件会被移除
Exclude模式:如果文件匹配语法要求删选条件,则文件不会被移除
(2)规则只适用于文件,如果你想要适用于文件夹,请勾选Apply pattern also on directories参数
我这里填写的规则意思是,在workspace目录下的本项目中,筛选出所有以.html为后缀的文件并移除他们。
关于这个功能的配置大家还可以参考官方文档的原文https://wiki.jenkins.io/display/JENKINS/Workspace+Cleanup+Plugin
接下来看一下构建日志检查构建环境是否执行:

五、丢弃旧的构建
每次构建都会保存数据,所以需要定期的清除过期文件,这时就用到了“丢弃旧的构建”这个功能。
保持构建的天数:每个构建能保留多少天
保持构建的最大个数:最多保留多少个构建

第四阶段完成…….
美丽人生:服务搭建篇五(总纲)·Jenkins+Jmeter+Gitlab持续集成实现接口流程自动化zhuanlan.zhihu.com