前言
来啦老铁!
前几天在改造我们团队自动化的时候,一时兴起想把我们的邮件报告,升级一下,想改改Jenkinsfile,把邮件样式改成HTML版本的,本想着应该是个很简单的活,没想到查资料+实现,花了我大半个下午,还是太年轻了,特做下记录,也供大家参考!
先给大家看下效果:
升级前的邮件
升级后的邮件
整体步骤
- 建立邮件模板;
- 修改Jenkinsfile;
1. 建立邮件模板;
在项目内任意位置建立邮件模板,如根目录下的email_template.html文件,邮件模板代码如下:
<!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>THIS EMAIL IS SENT BY JENKINS AUTOMATICALLY, PLEASE DON'T REPLY!</td>
</tr>
<tr>
<td>
<h2>
<font color="#0000FF">BUILD RESULT - ${BUILD_STATUS}</font>
</h2>
</td>
</tr>
<tr>
<td><br />
<b>
<font color="#0B610B">DETAILS:</font>
</b>
<ht size="2" width="100%" byte="center" />
</td>
</tr>
<tr>
<td>
<ul>
<li>PROJECT NAME : ${PROJECT_NAME}</li>
<li>PROJECT URL : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
<li>BUILD NUMBER : ${BUILD_NUMBER}</li>
<li>STARTED BY : ${CAUSE}</li>
<li>BUILD URL : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>BUILD LOG : <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>BUILD WORKFLOW : <a
href="${PROJECT_URL}workflow-stage">${PROJECT_URL}workflow-stage</a></li>
</ul>
</td>
</tr>
<tr>
<td>
<font color="#0B610B">BUILD LOG (LAST 200 ROWS):</font></b>
<hr size="2" width="100%" byte="center" />
</td>
</tr>
<tr>
<td><textarea cols="80" rows="30" readonly="readonly"
style="font-family: Courier New">${BUILD_LOG,maxLines=200,escapeHtml=true}</textarea>
</td>
</tr>
</table>
</body>
</html>
稍微解读一下:
1). 模板内直接使用Jenkins的环境变量,如${BUILD_URL}、${BUILD_NUMBER}等;
2). 由于该模板全部动态使用Jenkins的环境变量,没有针对某个job的定制化代码,因此,该模板可以给任意job使用;
3). 该模板还包含了log,我们可以指定想在邮件里展示的log条数(本例为200条),关键代码:
<textarea cols="80" rows="30" readonly="readonly"
style="font-family: Courier New">${BUILD_LOG,maxLines=200,escapeHtml=true}</textarea>
2. 修改Jenkinsfile;
修改前的发邮件节点:
post {
always {
emailext (
subject: "[${env.JOB_NAME}][${env.ENV}] #${env.BUILD_NUMBER}: Build ${currentBuild.currentResult}",
body: "Details please refer to ${env.BUILD_URL}",
attachLog: true,
recipientProviders: [[$class: 'DevelopersRecipientProvider', $class: 'CulpritsRecipientProvider']],
to: 'dylan.zhang@XXXX.com'
)
}
}
修改后的发邮件节点:
post {
always {
emailext (
emailext(
subject: "[${env.JOB_NAME}] [${env.ENV}] #${env.BUILD_NUMBER} : ${currentBuild.currentResult}",
body: '${FILE,path="email_template.html"}',
attachLog: true,
recipientProviders: [[$class: 'DevelopersRecipientProvider', $class: 'CulpritsRecipientProvider']],
mimeType: 'text/html',
to: 'dylan.zhang@XXXX.com'
)
}
}
稍微解读一下:
1). 关键点一,在body中指明信息来源:'${FILE,path="email_template.html"}';
2). 关键点二,指明邮件类型,mimeType: 'text/html';
3). 如果不是采用Jenkinsfile的,这些步骤可直接在job上配置,很类似;
运行Jenkins job完成后,就能顺利收到我们自定义的HTML邮件啦!该邮件模板对我来说已经足够用,毕竟相比之前的邮件报告,信息量多了不少,样式也还算可以,我们就不加入过多的花狸狐哨的东西啦!
回过头来看,整体实现还是挺简单的,只是当时查资料的时候,某度上查的资料都不全,都没有提到mimeType: 'text/html',最后在国外stack overflow某个帖子上看到这个信息,最终才顺利解决的,费了老大把劲!
今天就简单介绍到这啦!
如果本文对您有帮助,麻烦点赞+关注!
谢谢!