分享

Hudson/Jenkins

 bananarlily 2015-11-20

Hudson/Jenkins默认提供了发送邮件的功能,但是比较有局限性。插件Email-ext提供了比较好的email功能。安装好该插件后,可以在$JENKINS_HOME($HUDSON_HOME)/email-templates目录下定义自己的email模板。下面提供一个jelly script基于junit的测试结果生成email的模板,先上email效果图:


该email report风格比较清新,该有的信息都有了,通过的case用绿色标出,失败的case用红色标出,其他的log, 具体的report, 最近build的整体情况的link也都给出。

对应的jelly script(myreport.jelly)如下:

  1. <j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define">  
  2.  <body style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">  
  3.   <j:set var="spc" value="  " />  
  4.   <!-- GENERAL INFO -->  
  5.   <table style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">  
  6.    <tr>  
  7.     <td align="right" style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">  
  8.      <j:choose>  
  9.       <j:when test="${build.result=='SUCCESS'}">  
  10.        <img src="${rooturl}static/e59dfe28/images/32x32/blue.gif">  
  11.        </img>  
  12.       </j:when>  
  13.       <j:when test="${build.result=='FAILURE'}">  
  14.        <img src="${rooturl}static/e59dfe28/images/32x32/red.gif">  
  15.        </img>  
  16.       </j:when>  
  17.       <j:otherwise>  
  18.        <img src="${rooturl}static/e59dfe28/images/32x32/yellow.gif">  
  19.        </img>  
  20.       </j:otherwise>  
  21.      </j:choose>  
  22.     </td>  
  23.     <td valign="center" style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">  
  24.      <b style="font-size: 200%;">  
  25.       TESTRUN ${build.result}  
  26.      </b>  
  27.     </td>  
  28.    </tr>  
  29.    <tr>  
  30.     <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">  
  31.      Project:  
  32.     </td>  
  33.     <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">  
  34.      ${project.name}  
  35.     </td>  
  36.    </tr>  
  37.    <tr>  
  38.     <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">  
  39.      Date of run:  
  40.     </td>  
  41.     <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">  
  42.      ${it.timestampString}  
  43.     </td>  
  44.    </tr>  
  45.    <tr>  
  46.     <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">  
  47.      Test duration:  
  48.     </td>  
  49.     <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">  
  50.      ${build.durationString}  
  51.     </td>  
  52.    </tr>  
  53.    <tr>  
  54.     <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">  
  55.      Test report:  
  56.     </td>  
  57.     <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">  
  58.      <a href="http://xxxxx:8080/view/job/${project.name}/${build.number}/xxx_build_report/">  
  59.       xxxxx Test Report  
  60.      </a>  
  61.     </td>  
  62.    </tr>  
  63.     <tr>  
  64.     <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">  
  65.      Console logs:  
  66.     </td>  
  67.     <td style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">  
  68.      <a href="${rooturl}${build.url}console">  
  69.       ${rooturl}${build.url}console  
  70.      </a>  
  71.     </td>  
  72.    </tr>  
  73.   </table>  
  74.   <br />  
  75.     
  76.   <div style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">  
  77.       <j:set var="healthIconSize" value="16x16" />  
  78.       <j:set var="healthReports" value="${project.buildHealthReports}" />  
  79.       <j:if test="${healthReports!=null}">  
  80.       <b style="font-size: 160%;">Health Report</b>  
  81.       <br />  
  82.         <table>  
  83.           <tr>  
  84.             <th>W</th>  
  85.             <th>Description</th>  
  86.             <th>Score</th>  
  87.           </tr>  
  88.           <j:forEach var="healthReport" items="${healthReports}">  
  89.             <tr>  
  90.               <td>  
  91.                 <img src="${rooturl}${healthReport.getIconUrl(healthIconSize)}" />  
  92.               </td>  
  93.               <td>${healthReport.description}</td>  
  94.               <td>${healthReport.score}</td>  
  95.             </tr>  
  96.           </j:forEach>  
  97.         </table>  
  98.         <br />  
  99.       </j:if>  
  100.     </div>  
  101.       
  102.   
  103.   <j:set var="junitResultList" value="${it.JUnitTestResult}" />  
  104.     <j:if test="${junitResultList.isEmpty()!=true}">  
  105.       <div style="font-family: Verdana, Helvetica, sans serif; font-size: 11px; color: black">  
  106.         <b style="font-size: 160%;">Summary Report</b>  
  107.         <br />  
  108.         <table style="border: 1px solid black; border-collapse:collapse;">  
  109.           <tr>  
  110.             <th style="border: 1px solid black; border-collapse:collapse;">Package</th>  
  111.             <th style="border: 1px solid black; border-collapse:collapse;">Failed</th>  
  112.             <th style="border: 1px solid black; border-collapse:collapse;">Passed</th>  
  113.             <th style="border: 1px solid black; border-collapse:collapse;">Skipped</th>  
  114.             <th style="border: 1px solid black; border-collapse:collapse;">Total</th>  
  115.           </tr>  
  116.           <j:forEach var="junitResult" items="${it.JUnitTestResult}">  
  117.             <j:forEach var="packageResult" items="${junitResult.getChildren()}">  
  118.               <tr>  
  119.                 <td style="border: 1px solid black; border-collapse:collapse;">  
  120.                   <tt>${packageResult.getName()}</tt>  
  121.                 </td>  
  122.                 <td style="border: 1px solid black;border-collapse:collapse; color:red;">${packageResult.getFailCount()}</td>  
  123.                 <td style="border: 1px solid black;border-collapse:collapse; color:blue;">${packageResult.getPassCount()}</td>  
  124.                 <td style="border: 1px solid black;border-collapse:collapse; color:grey;">${packageResult.getSkipCount()}</td>  
  125.                 <td style="border: 1px solid black;border-collapse:collapse;">  
  126.                   <b>${packageResult.getPassCount()+packageResult.getFailCount()+packageResult.getSkipCount()}</b>  
  127.                 </td>  
  128.               </tr>  
  129.               <j:forEach var="passed_test" items="${packageResult.getPassedTests()}">  
  130.                 <tr>  
  131.                   <td style="color:green;" colspan="5">  
  132.                     <tt>${passed_test.getFullName()}</tt>  
  133.                   </td>  
  134.                 </tr>  
  135.               </j:forEach>  
  136.               <j:forEach var="failed_test" items="${packageResult.getFailedTests()}">  
  137.                 <tr>  
  138.                   <td style="color:red;" colspan="5">  
  139.                     <tt>${failed_test.getFullName()}</tt>  
  140.                   </td>  
  141.                 </tr>  
  142.               </j:forEach>  
  143.             </j:forEach>  
  144.           </j:forEach>  
  145.         </table>  
  146.         <br />  
  147.         <div>Note: See attachment also for summary report broken down by classes/methods.</div>  
  148.         <br />  
  149.       </div>  
  150.     </j:if>  
  151.  </body>  
  152. </j:jelly>  

值得注意的是,在hudson/jenkins中,必须设置Publis JUnit test result report,同时,在editable email notification的Default Content中填入${JELLY_SCRIPT,template="myreport"},如下图所示:



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多