jenkins执⾏shell脚本时邮件模板使⽤⼿记
在⼯作中,需要⽤Jenkins调度执⾏shell脚本,同时需要发送邮件通知执⾏情况。其中⽐较特殊的⼀个需求是邮件中显⽰shell脚本执⾏结果。
使⽤Jenkins默认的邮件配置,邮件内容中显⽰的是最近⼀次构建console输出的内容的⼀个链接,不能满⾜要求;考虑Jenkins可以⽀持jelly和groovy组建html模板邮件,是否可以将shell脚本的输出放置到邮件模板中。通过参考以下⽂章和⼀番尝试终于搞定了。
参考⽂章:
实现的基本思路是 通过邮件模板变量${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"
>
<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>
shell脚本返回执行结果</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-${BU                <br />
<br />
</td>
</tr> -->
<tr>
<td>
<!--<textarea cols="80" rows="30" readonly="readonly" >
${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 调⽤⽅式:
awk -F"\t" -v wlist=$white_list -f $dir/awk_out.awk ${wkdir}/bidamp_full_$dt 最终邮件效果如下:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。