Jenkins:郵件通知

編程語言 Groovy HTML 科技 Java淺析 Java淺析 2017-08-28

Jenkins 內置了 Mailer 插件用於發送郵件通知,但是 Mailer 插件的功能比較簡單,無法按照用戶的需求進行郵件的定製。Email Extension 是 Jenkins 默認推薦安裝的一款功能強大的郵件插件,使用它幾乎可以定製郵件的任何部分。本文將結合筆者的使用經驗介紹 Email Extension 插件的使用方法。

全局配置

和其它的插件一樣,Email Extension 插件的全局配置也是在 Jenkins -> Manage Jenkins -> Configure System 中。 具體的配置項非常多,下面介紹幾個比較基本且重要的配置項。

SMTP server

設置 smtp server 的名稱或 IP 地址。

郵件類型

可以選擇 HTML 格式的郵件或者是純文本格式的郵件:

Jenkins:郵件通知

默認標題

默認的標題為:

$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!

顯示項目名稱,Build 號和 Build 結果。如果沒有其它的要求,這個標題也算是簡單明瞭啊!

默認的郵件內容

默認的郵件內容為:

$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:

一般我們會通過郵件模板等功能實現一個完整的郵件內容,所以可以忽略這個默認的內容。

默認的觸發條件

作為一種通知方式,在什麼條件下觸發郵件通知是極為重要的。Email Extension 插件支持的觸發器類型是很豐富的:

Jenkins:郵件通知

個人覺得這裡的默認設置沒那麼重要,因為每個項目的情況都是不一樣的,所以最終都需要在項目上進行設置。而項目上的設置會覆蓋這裡的默認設置。

為項目添加郵件通知

在項目的配置項中添加 Post-build Actions,選擇 "Editable Email Notification":

Jenkins:郵件通知

然後就可以進行詳細的設置了:

Jenkins:郵件通知

下面介紹一下比較重要的配置項。

關閉郵件通知

Jenkins:郵件通知

這個選項在維護項目時非常有用,可以臨時關閉郵件通知,避免把不必要的郵件發送給用戶。

收件人列表

收件人郵件地址,多於一個時需要使用逗號分隔。

郵件類型

和全局設置中的郵件類型一樣,沒有特殊要求的話保留默認類型即可。此時會應用全局設置中的類型。

默認標題

標題的默認內容為:$DEFAULT_SUBJECT,也就是在全局配置中設置的內容。如果覺著不爽可以進行深度定製,也就是使用系統提供的變量進行拼湊。至於能拿到什麼變量,可以參考 Conten Token Reference 的內容:

Jenkins:郵件通知

點擊問號圖標就會列出所有可用的變量,實在是太多了,就不貼出來佔篇幅了!

默認內容

默認內容為:$DEFAULT_CONTENT,也是在全局配置中設置的內容。和默認標題一樣,你也可以自行定義。但多數情況下都會使用後面介紹的郵件模板,這裡就不囉嗦了。

附件

有時把一些 Build 產物作為通知郵件的附件是很有用的。這裡我們也可以輕鬆實現:

Jenkins:郵件通知

我們可以指定文件的名稱,也可以使用通配符。

除了 Build 的產物,Build 的日誌也是極其重要的信息。它可以幫助我們快速的調查 Build 過程中的各種問題,所以也應該把 Build 日誌添加為郵件的附件:

Jenkins:郵件通知

測試一下,收到的郵件帶了兩個附件:

Jenkins:郵件通知

郵件模板

郵件的內容可以包含大量的信息,如果每個項目中都自己組織這些信息會費時費力。使用郵件的模板功能可以極大的提高生產力!

Email Extension 插件支持兩種類型的郵件模板,分別是 Jelly 模板和 Groovy 模板。當前的現狀是 Groovy 模板正在逐步的取代 Jelly 模板。但是兩種模板的設置和使用方式基本一樣,我們以 Groovy 模板為例進行介紹。

在 Email Extension 插件的官方文檔中可以找到模板的下載地址。筆者以下載的 groovy-html.template 文件為例進行說明。首先是安裝郵件模板,其實就是把模板文件複製到 Jenkins 安裝目錄下的 email-templates 目錄中,如果該目錄不存在就先創建它。

接著我們可以測試一下安裝的模板是否能正常工作。打開一個添加了 "Editable Email Notification" 的項目,你會發現在左邊的菜單中多了一項 "Email Template Testing":

Jenkins:郵件通知

選擇這個菜單項並且輸入剛才安裝的模板名稱:

Jenkins:郵件通知

點擊 "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 &QUOT;<a href='${env.BUILD_URL}'>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>&QUOT;</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 &QUOT;<a href='${env.BUILD_URL}'>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>&QUOT;</p>""",

recipientProviders: [[$class: 'DevelopersRecipientProvider']]

)

}

}

}

上面的代碼在 stage 執行成功或者失敗的情況下發送郵件。但郵件的內容只是簡單的純文本或這是 HTML 格式的文本。筆者嘗試在 pipeline 代碼中使用郵件模板的功能,但不管是 Jelly 模板還是 Groovy 模板都不能正常工作,所以這裡還有待完善的功能。

總結

Email Extension 是一款可定製性強、功能全面的 Jenkins 郵件通知插件。隨著 pipeline 日漸成為主流的持續集成方式,希望能 Email Extension 也能緊跟趨勢提供對 pipeline 更好的支持。

相關推薦

推薦中...