Jenkins實現自動化郵件傳送踩坑記錄

奕鵬發表於2020-08-15

文章簡介

本文分享Jenkins實現郵件傳送,安裝Jenkins可參考jenkins安裝。寫這篇文章,是在實際使用Jenkins過程中遇到這樣一個問題,當每次Jenkins構建成功或者失敗後,需要個人登入Jenkins檢視構建結果,同時在構建前做了資料備份,也需要手動的拷貝一份備份檔案到本地。為了解決這個問題,便想到了Jenkins的郵件功能。在個人實踐中,在每次master分支自動構建前,需要將資料庫和程式碼打包、備份,在Jenkins構建結束之後,將備份的檔案傳送給對應的負責人。

文章部分細節的地方可能省略待過,因此需要對Jenkins有一定使用的使用者比較合適,如果不熟悉的,可以參考上面提交的文章。文章涉及到不準確的資訊還望反饋。

大致邏輯

接下來整個流程,也都按照該流程進行演示如何配置。

安裝外掛

首先點選管理,然後點選外掛管理,跳轉到外掛中心。


如果沒有安裝過email對應的外掛,點選可選外掛按鈕,然後輸入email關鍵詞,進行搜尋即可。這裡我已經安裝過了,為了演示選擇已安裝選單。

在安裝外掛的過程中,需要注意一個版本號。2.73版本的外掛有一個bug,就是配置正確卻不能傳送郵件。建議避開這個版本號。

系統配置

安裝好外掛之後,接下來就需要進入系統配置。進入系統配置,主要配置兩個地方,一個是管理員的郵箱地址,一個是外掛的配置資訊。



記住外掛傳送郵件的賬號一定的和管理員的郵箱賬號一致,否者會出現下面錯誤資訊。

錯誤資訊:

com.sun.mail.smtp.SMTPSenderFailedException: 553 Mail from must equal authorized user
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1587)
Caused: com.sun.mail.smtp.SMTPSendFailedException: 553 Mail from must equal authorized user;
  nested exception is:
    com.sun.mail.smtp.SMTPSenderFailedException: 553 Mail from must equal authorized user
    at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2057)
    at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1580)
    at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1097)
    at javax.mail.Transport.send0(Transport.java:195)
    at javax.mail.Transport.send(Transport.java:124)
    at hudson.tasks.Mailer$DescriptorImpl.doSendTestMail(Mailer.java:581)
    at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)

錯誤資訊的大致意思就是說,郵箱的授權使用者(外掛配置的賬號)和from(郵件傳送者)賬號不一致。

這裡其實有點小困惑,郵件配置授權賬戶,為什麼管理員的郵件賬號還必須保持一致。按理來說,既然配置了授權使用者,就採用配置的授權郵箱進行傳送唄。可能是系統使用的管理員郵件傳送。這裡的配置授權僅僅是為了授權第三方郵箱賬戶吧。

專案配置

接下來,我們建立一個任務測試傳送郵件。至於具體的配置這裡省略待過,直接記錄配置郵件的地方。


這裡面就是針對該專案的具體配置資訊,上面我們提交到系統配置,屬於全域性配置。如果這裡沒有配置,則預設走全域性配置。大致的配置資訊和全域性配置都是相同的作用,可以根據不同的任務,自行配置即可。

郵件測試

最後配置完畢,當提交程式碼待倉庫後,使用webhooks自動觸發構建,登入郵箱就可以檢視到下面的一些構建基礎資訊了。如果郵件需要更多的配置資訊,直接到任務中去配置即可。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章