jenkins执行shell脚本时邮件模板使用手记
在工作中,需要用Jenkins调度执行shell脚本,同时需要发送邮件通知执行情况。其中比较特殊的一个需求是邮件中显示shell脚本执行结果。前提条件:jinkens集成工具已安装了邮件插件,https://plugins.jenkins.io/email-ext GitHub地址:https://github.com/jenkinsci/email-ext-plugin
在工作中,需要用Jenkins调度执行shell脚本,同时需要发送邮件通知执行情况。其中比较特殊的一个需求是邮件中显示shell脚本执行结果。
前提条件:jinkens集成工具已安装了邮件插件,https://plugins.jenkins.io/email-ext GitHub地址:https://github.com/jenkinsci/email-ext-plugin
使用Jenkins默认的邮件配置,邮件内容中显示的是最近一次构建console输出的内容的一个链接,不能满足要求;考虑Jenkins可以支持jelly和groovy组建html模板邮件,是否可以将shell脚本的输出放置到邮件模板中。通过参考以下文章和一番尝试终于搞定了。
参考文章:
http://blog.csdn.net/wangmuming/article/details/22925509
http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html java正则
实现的基本思路是 通过邮件模板变量${BUILD_LOG_MULTILINE_REGEX} 正则匹配来实现,同时匹配中的部分为html片段
具体配置:
1.邮件内容配置
2:邮件模板
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>adx商品竞价系数调整:${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>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
</ul>
</td>
</tr>
<tr>
<td><b><font color="#0B610B">执行调整的广告位列表:</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<!-- <tr>
<td>Test Logs (if test has ran): <a
href="${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip">${PROJECT_URL}/ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip</a>
<br />
<br />
</td>
</tr> -->
<tr>
<td>
<!--<textarea cols="80" rows="30" readonly="readonly" style="font-family: Courier New">
${BUILD_LOG, maxLines=100}
</textarea>-->
<!--${BUILD_LOG, maxLines=100,escapeHtml=true}-->
${BUILD_LOG_MULTILINE_REGEX,showTruncatedLines="false",regex="<tr>([\\s\\S\\u4E00-\\u9FA5]*)<\\/tr>",escapeHtml="false"}
</td>
</tr>
<tr>
<td><b><font color="#0B610B">构建日志:</font></b>
</tr>
<tr>
<td>
${BUILD_LOG, maxLines=100,escapeHtml="false"}
</td>
</tr>
</table>
</body>
</html>
其中 ${BUILD_LOG_MULTILINE_REGEX,showTruncatedLines="false",regex="<tr>([\\s\\S\\u4E00-\\u9FA5]*)<\\/tr>",escapeHtml="false"}
用来匹配<tr>...</tr>的内容显示在邮件中。
3.shell中输出用于在邮件中显示的内容,这里对结果整理为一个文件通过AWK格式化为邮件中的html片段,awk 脚本如下:
function btd(v){
print "<td style=\"border:1px solid;width=60px\"><b>"v"</b></td>"
}
BEGIN{
print "<tr>"
btd("date");
btd("ad_traffic_type");
btd("posid");
btd("income");
btd("cost");
btd("roa");
btd("amp");
btd("old_bid");
btd("new_bid");
print "</tr>"
}
{
if (match(wlist,$3)){
print "<tr>";
btd($1);
btd($2);
btd($3);
btd($4);
btd($5);
btd($6);
btd($7);
btd($8);
btd($9);
print "</tr>";
}
}
awk -F"\t" -v wlist=$white_list -f $dir/awk_out.awk ${wkdir}/bidamp_full_$dt
最终邮件效果如下:
更多推荐
所有评论(0)