Jenkins郵件配置,實現郵件發送策略(可實現每個Job對應不同的發送郵箱)


前言:

首先,要有一個用來發送的郵箱,首選網易!參考:http://www.cnblogs.com/EasonJim/p/6051636.html,這里我注冊了網易的免費企業郵箱。

並且我新建沒多個郵箱用來對應不同的Job。

技巧:

先確保郵箱的smtp功能能正常使用,現在jenkins機器上裝一個foxmail,確定能正常收發。

很多種情況郵箱類型很多,先用最簡單的網易郵箱配置好后,測試收發正常。待正常后再換成特定的企業郵箱來配置。

正題:

Jenkins發送郵件有幾種配置方式:

1、使用內置的郵件插進(使用全局的配置,只能有一個接收方)

2、使用郵件擴展插件【Email Extension Plugin】(使用全局的配置,能有多個接收方,但是只能有一個發送方)

3、使用郵件擴展插件【Email Extension Plugin】+Groovy腳本(實現每個Job對應不同的發送郵件,多個發送方)

4、開發郵件轉發中間件或者使用Foxmail這些工具來轉發(每個Job發送到對應的郵箱,然后中間件負責轉發到成員列表的郵箱。對發送插件沒什么要求,只要能發送即可)

5、走國際路線,使用【Googole網上論壇】即groups.google.com(通過邀請實現進入群組,然后jenkins只要發送郵件到這個群組油箱即可)

具體操作:

注意:操作涉及的郵箱為163免費企業郵箱

1、使用內置的郵件插進

【系統管理】->【系統設置】->【郵件通知】->【高級】,配置如下:

參照如上配置,勾選【通過發送測試郵件測試配置】進行發送配置。

如果出現“Failed to send out e-mail”,那么說明沒有配置好【系統管理員郵件地址】

配置【系統管理員郵件地址】時,要和SMTP認證的用戶名保持一致,不然無法發送。

上面的發送時有個小技巧,【顯示的名稱 <郵件地址>】(中間有個空格),這樣的形式發送后會在郵件提示窗口顯示郵件的別名。

最后,在Job頁面上增加【增加構建后操作步驟】->【E-mail Notification】,配置要接收人的郵箱,很顯然,這里只能寫一個人的地址,且配置單一。如果要發送到多人,可以嘗試上述第4點開發中間件實現。

2、使用郵件擴展插件

【系統管理】->【系統設置】->【Extended E-mail Notification】->【高級】,配置如下:

其余都留空,根據需要配置。

同樣,【Use SMTP Authentication】下的【User Name】也要和【系統管理員郵件地址】保持一致

配置【系統管理員郵件地址】時,要和SMTP認證的用戶名保持一致,不然無法發送。

最后,在Job頁面上增加【增加構建后操作步驟】->【Editable Email Notification】,配置要接收人的郵箱列表

很顯然,這里可以配置多個收件人,且配置點很多,包括構建點的觸發發送,都可選擇。

提示:觸發點一般時always,這樣發送的時候不管成功還是失敗都會有日志。

提示2:構建的日志一般附帶上去,這樣方便排查

3、使用郵件擴展插件+Groovy腳本

通過上面第2部的配置可以發現,郵件發送人只能配置一個,而且只能是全局的;那么要對應每個Job對應不同的發送人就需要用到Groovy腳本去實現。

通過研究郵件擴展插件【Email Extension Plugin】的源碼發現,其提供的接口無法實現在每個Job下動態設置臨時發送人,只能設置到全局的配置上面;如果設置到全局會有一個弊端,比如構建在同一個時間點發送郵件,那么可能存在零界點的情況導致發送人錯亂,不過一般構建不會搭建太多,所以也可忽視。

在Job的【Editable Email Notification】上,打開【Advanced Settings...】,在【Pre-send Script】(Pre-send表示在發送前的事件)上寫入設置郵件的Groovy腳本:

import jenkins.model.*
import hudson.model.*
import javax.mail.internet.InternetAddress

//設置發送郵件的用戶名密碼
def username="project1@email.com"
def password="123456"

//寫入發送郵件的用戶名密碼到全局配置上,同時也可以設置smtp server這些選項;這里由於我采用統一的郵箱服務商,所以只需設置兩項
def descriptor1 = Jenkins.instance.getDescriptorByType(hudson.plugins.emailext.ExtendedEmailPublisherDescriptor.class)
descriptor1.setSmtpAuthUsername(username)
descriptor1.setSmtpAuthPassword(password)
descriptor1.save()

//寫入系統管理員郵件地址到全局配置上
def descriptor2 = Jenkins.instance.getDescriptorByType(hudson.tasks.Mailer.DescriptorImpl.class)
descriptor2.setAdminAddress(String.format("JenkinsJobEmail <%s>",username))
descriptor2.save()

//經過測試,這個是臨時設置發送人的系統管理員郵件地址,不然上面設置后,發送時還是不會發生改變
def email = new InternetAddress(String.format("JenkinsJobEmail <%s>", username))
msg.setFrom(email)
 

4、開發郵件轉發中間件(開發比較復雜,不建議使用)

每個Job發送到對應的郵箱,然后中間件負責轉發到成員列表的郵箱。

中間件可以是服務,進程,或者用pythone寫一個進程,運行在linux上,通過時間間隔獲取指定郵箱的郵件,有新郵件時,再進行轉發的特定的郵箱列表。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM