將 Jenkins Job 的歷史結果整理出視覺化的 Daily Report mail (三)
為了寄出統整 Jenkins 上游 Job 的 daily report mail,第一篇說明了 Jenkins Daily Report Job 的設定,第二篇說明了如何用 Python script 統計 Job result 以及產生視覺化的圖表。本篇說明如何用 jelly script 產生 html 格式的 mail,email 裡面除了顯示第二篇文章中產生的視覺畫圖表之外,也會包含前一天每個小時的 Job 結果,如下圖:
Email-exit Plugin 會預設 jelly script 的位置在 $JENKINS_HOME/email-templates 目錄底下,但是安裝完畢時並沒有這個目錄,也就是說要自己在 Jenkins 安裝目錄下新建一個 email-templates 的 folder,然後把 jelly scripts 放在這個 folder 之下,以我們的例子來說就是 load-monitor-dailyreport.jelly
詳細說明可以參考 Email-ext plugin 的網頁。
這裡可以找到一些 email-ext 提供的 jelly script 的範例,建議要快速上手,可以 copy 一個來改,ex: html.jelly。這個 html.jelly script 預設會包含 change set, maven, junit 等相關的內容,但是因為我們的上游 Job 都是自訂的,因此需要自己修改 script 內容,後文只說明與 daily report 有關的部分。
Jelly Script 的架構如下,後續說明主要都是 BODY 裡面的內容。
一開始先讀取相關的環境變數
顯示視覺化的 PNG 圖檔,這邊是假設圖檔放在區域網路內。
最後顯示"前一天每個小時的 Job 結果",上一篇文章裡有提到我們將資料轉成 HOURLY_DATA_0, HOURLY_DATA_1 這類的環境變數,在 jelly script 裡面再將其讀取出來。
這樣我們就得到想要的 email 內容了。
要測試 jelly script 的內容是否正確,可以使用 Email-exit 提供的快速檢視的功能,輸入 jelly script 的檔名,選擇一次要檢視的 build number,就會立刻顯示郵件內容。以 DailyReport Job job 為例,Email Template Testing 的位置在 http://jenkinshost:8080/job/DailyReport/templateTest/
Email-exit Plugin 會預設 jelly script 的位置在 $JENKINS_HOME/email-templates 目錄底下,但是安裝完畢時並沒有這個目錄,也就是說要自己在 Jenkins 安裝目錄下新建一個 email-templates 的 folder,然後把 jelly scripts 放在這個 folder 之下,以我們的例子來說就是 load-monitor-dailyreport.jelly
詳細說明可以參考 Email-ext plugin 的網頁。
這裡可以找到一些 email-ext 提供的 jelly script 的範例,建議要快速上手,可以 copy 一個來改,ex: html.jelly。這個 html.jelly script 預設會包含 change set, maven, junit 等相關的內容,但是因為我們的上游 Job 都是自訂的,因此需要自己修改 script 內容,後文只說明與 daily report 有關的部分。
Jelly Script 的架構如下,後續說明主要都是 BODY 裡面的內容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?jelly escape-by-default='true'?> <!DOCTYPE html [ <!ENTITY nbsp "&#38;nbsp;"> ]> <j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define"> <STYLE> ... </STYLE> <BODY> <!-- GENERAL INFO --> </BODY> </j:jelly> |
一開始先讀取相關的環境變數
1 2 3 4 5 6 7 8 9 10 | <j:set var="buildenv" value="${build.getEnvironment(listener)}" /> <j:set var="testHost" value="${buildenv.get('COMPUTERNAME')}" /> <j:set var="jobName" value="${buildenv.get('MY_JOB_NAME')}" /> <j:set var="reportTag" value="${buildenv.get('REPORT_TAG')}" /> <TABLE> <TR><TD class="bg1" colspan="2"><B>Project Information</B></TD></TR> <TR><TD>Job:</TD><TD>${jobName}</TD></TR> </TABLE> <BR/> |
顯示視覺化的 PNG 圖檔,這邊是假設圖檔放在區域網路內。
1 2 3 4 5 | <TABLE> <TR><TD class="bg1" colspan="2"><B>Project Trend</B></TD></TR> <TR><TD><img alt="" src="file:///${testHost}/workshop/workspace/${jobName}/png/status_${reportTag}.png" /></TD></TR> </TABLE> <BR/> |
最後顯示"前一天每個小時的 Job 結果",上一篇文章裡有提到我們將資料轉成 HOURLY_DATA_0, HOURLY_DATA_1 這類的環境變數,在 jelly script 裡面再將其讀取出來。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | <j:set var="hourlyDataPre" value="HOURLY_DATA_" /> <j:set var="hourlyData" value="INIT_VALUE" /> <TABLE> <TR><TD class="bg1" colspan="2"><B>Hourly Status</B></TD></TR> <TR><TD>${reportTag}</TD></TR> </TABLE> <j:set var="hourlyDataSeq" value="0" /> <TABLE class="border1"> <j:while test="${hourlyData!=null}"> <j:set var="hourlyData" value="${buildenv.get(hourlyDataPre + hourlyDataSeq)}" /> <j:choose> <j:when test="${hourlyData!=null}"> <TR> <j:forEach var="col" items="${hourlyData}"> <j:if test="${col!='FAILURE' and col!='UNSTABLE'}"> <TD class="border1">${col}</TD> </j:if> <j:if test="${col=='FAILURE'}"> <TD class="border1"><span style="color:#ff0000">${col}</span></TD> </j:if> <j:if test="${col=='UNSTABLE'}"> <TD class="border1"><span style="color:#FE9A2E">${col}</span></TD> </j:if> </j:forEach> </TR> </j:when> </j:choose> <j:set var="hourlyDataSeq" value="${hourlyDataSeq + 1}" /> </j:while> </TABLE> <BR/> |
這樣我們就得到想要的 email 內容了。
要測試 jelly script 的內容是否正確,可以使用 Email-exit 提供的快速檢視的功能,輸入 jelly script 的檔名,選擇一次要檢視的 build number,就會立刻顯示郵件內容。以 DailyReport Job job 為例,Email Template Testing 的位置在 http://jenkinshost:8080/job/DailyReport/templateTest/
留言
張貼留言