Jenkins : 郵件通知
目錄
- 全局配置
- 為項目添加郵件通知
- 郵件模板
- Pipeline 支持
- 總結
Jenkins 內置了 Mailer 插件用於發送郵件通知,但是 Mailer 插件的功能比較簡單,無法按照用戶的需求進行郵件的定制。Email Extension 是 Jenkins 默認推薦安裝的一款功能強大的郵件插件,使用它幾乎可以定制郵件的任何部分。本文將結合筆者的使用經驗介紹 Email Extension 插件的使用方法。
全局配置
和其它的插件一樣,Email Extension 插件的全局配置也是在 Jenkins -> Manage Jenkins -> Configure System 中。具體的配置項非常多,下面介紹幾個比較基本且重要的配置項。
SMTP server
設置 smtp server 的名稱或 IP 地址。
郵件類型
可以選擇 HTML 格式的郵件或者是純文本格式的郵件:
默認標題
默認的標題為:
$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!
顯示項目名稱,Build 號和 Build 結果。如果沒有其它的要求,這個標題也算是簡單明了啊!
默認的郵件內容
默認的郵件內容為:
$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS: Check console output at $BUILD_URL to view the results.
一般我們會通過郵件模板等功能實現一個完整的郵件內容,所以可以忽略這個默認的內容。
默認的觸發條件
作為一種通知方式,在什麽條件下觸發郵件通知是極為重要的。Email Extension 插件支持的觸發器類型是很豐富的:
個人覺得這裏的默認設置沒那麽重要,因為每個項目的情況都是不一樣的,所以最終都需要在項目上進行設置。而項目上的設置會覆蓋這裏的默認設置。
為項目添加郵件通知
在項目的配置項中添加 Post-build Actions,選擇 "Editable Email Notification":
然後就可以進行詳細的設置了:
下面介紹一下比較重要的配置項。
關閉郵件通知
這個選項在維護項目時非常有用,可以臨時關閉郵件通知,避免把不必要的郵件發送給用戶。
收件人列表
收件人郵件地址,多於一個時需要使用逗號分隔。
郵件類型
和全局設置中的郵件類型一樣,沒有特殊要求的話保留默認類型即可。此時會應用全局設置中的類型。
默認標題
標題的默認內容為:$DEFAULT_SUBJECT,也就是在全局配置中設置的內容。如果覺著不爽可以進行深度定制,也就是使用系統提供的變量進行拼湊。至於能拿到什麽變量,可以參考 Conten Token Reference 的內容:
點擊問號圖標就會列出所有可用的變量,實在是太多了,就不貼出來占篇幅了!
默認內容
默認內容為:$DEFAULT_CONTENT,也是在全局配置中設置的內容。和默認標題一樣,你也可以自行定義。但多數情況下都會使用後面介紹的郵件模板,這裏就不啰嗦了。
附件
有時把一些 Build 產物作為通知郵件的附件是很有用的。這裏我們也可以輕松實現:
我們可以指定文件的名稱,也可以使用通配符。
除了 Build 的產物,Build 的日誌也是極其重要的信息。它可以幫助我們快速的調查 Build 過程中的各種問題,所以也應該把 Build 日誌添加為郵件的附件:
測試一下,收到的郵件帶了兩個附件:
郵件模板
郵件的內容可以包含大量的信息,如果每個項目中都自己組織這些信息會費時費力。使用郵件的模板功能可以極大的提高生產力!
Email Extension 插件支持兩種類型的郵件模板,分別是 Jelly 模板和 Groovy 模板。當前的現狀是 Groovy 模板正在逐步的取代 Jelly 模板。但是兩種模板的設置和使用方式基本一樣,我們以 Groovy 模板為例進行介紹。
在 Email Extension 插件的官方文檔中可以找到模板的下載地址。筆者以下載的 groovy-html.template 文件為例進行說明。首先是安裝郵件模板,其實就是把模板文件復制到 Jenkins 安裝目錄下的 email-templates 目錄中,如果該目錄不存在就先創建它。
接著我們可以測試一下安裝的模板是否能正常工作。打開一個添加了 "Editable Email Notification" 的項目,你會發現在左邊的菜單中多了一項 "Email Template Testing":
選擇這個菜單項並且輸入剛才安裝的模板名稱:
點擊 "Go" 按鈕,一個預覽的郵件內容就會出現在下面的空白處。
最後我們需要在郵件通知的配置中應用這個模板。其實就是設置 Default Content 為:
${SCRIPT, template="groovy-html.template"}
好了,郵件的模板設置已經完成,趕快觸發個 Build 看看結果吧!
Pipeline 支持
Email Extension 插件支持 pipeline, 下面的代碼可以很好的工作:
stage(‘test‘) { steps { echo ‘hello‘ // error ‘build failed‘ } post { success { emailext ( subject: "SUCCESSFUL: Job ‘${env.JOB_NAME} [${env.BUILD_NUMBER}]‘", to: "[email protected]", body: """<p>SUCCESSFUL: Job ‘${env.JOB_NAME} [${env.BUILD_NUMBER}]‘:</p> <p>Check console output at "<a href=‘${env.BUILD_URL}‘>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"</p>""", recipientProviders: [[$class: ‘DevelopersRecipientProvider‘]] ) } failure { emailext ( subject: "FAILED: Job ‘${env.JOB_NAME} [${env.BUILD_NUMBER}]‘", to: "[email protected]", body: """<p>FAILED: Job ‘${env.JOB_NAME} [${env.BUILD_NUMBER}]‘:</p> <p>Check console output at "<a href=‘${env.BUILD_URL}‘>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"</p>""", recipientProviders: [[$class: ‘DevelopersRecipientProvider‘]] ) } } }
上面的代碼在 stage 執行成功或者失敗的情況下發送郵件。但郵件的內容只是簡單的純文本或這是 HTML 格式的文本。筆者嘗試在 pipeline 代碼中使用郵件模板的功能,但不管是 Jelly 模板還是 Groovy 模板都不能正常工作,所以這裏還有待完善的功能。
總結
Email Extension 是一款可定制性強、功能全面的 Jenkins 郵件通知插件。隨著 pipeline 日漸成為主流的持續集成方式,希望能 Email Extension 也能緊跟趨勢提供對 pipeline 更好的支持。
Jenkins : 郵件通知