2016-12-06 86 views
1

最近我們開始將詹金斯工作轉移到詹金斯管道,我們遇到了一些電子郵件發送問題。詹金斯管道不能正確發送電子郵件

如果我做這樣的事情

node('WCH-Regression') { 
    // do the first test 
    stage 'Test' 
    node { 
     try { 
      sh 'exit 1' 
     } catch(err) { 
      echo "Error" 
      currentBuild.result = "FAILURE" 
     } finally { 
       step([$class     : 'Mailer', 
        notifyEveryUnstableBuild: true, 
        recipients    : "[email protected]", 
        sendToIndividuals  : true]) 
     } 
    } 
} 

電子郵件被確認在作業日誌,但沒有交付。

[Pipeline] { 
[Pipeline] sh 
[workspace] Running shell script 
+ exit 1 
[Pipeline] echo 
Error 
[Pipeline] step 
Sending e-mails to: [email protected] 
[Pipeline] } 
[Pipeline] // node 

如果我在正常的Jenkins工作電子郵件中發送同樣的東西。還會在'Manage Jenkins'中測試電子郵件配置中的電子郵件。 我是否需要以某種方式啓用管道電子郵件?

我們正在運行 詹金斯:2.7.2 流水線插件2.2 梅勒插件1.17

我只是試圖通過簡單

node { 
    mail body: 'test', subject: 'test', to: '[email protected]' 
} 

發送電子郵件,並仍收到什麼。我在詹金斯的電子郵件配置沒問題,所有其他非管道工作都在發送電子郵件,並且測試電子郵件來自電子郵件通知配置正在工作。爲什麼管道電子郵件不能交付?

回答

2

我們終於想通了這一點。

我做了一些管道電子郵件代碼的「調試」。

node { 
    def transportClass = javax.mail.Session.getDefaultInstance(java.lang.System.getProperties(), (javax.mail.Authenticator)null).getTransport(new javax.mail.internet.InternetAddress("[email protected]")).getClass(); 
    echo transportClass.toString(); 
    mail body: 'test', subject: 'test', to: '[email protected]' 
} 

從這我注意到,用過的電子郵件轉運是嘲笑之一。

[Pipeline] { 
[Pipeline] echo 
class org.jvnet.mock_javamail.MockTransport 
[Pipeline] mail 
[Pipeline] } 
[Pipeline] // node 
[Pipeline] End of Pipeline 
Finished: SUCCESS 

當你有你的類路徑mock-javamail.jar發生這種情況。 我瀏覽了我們的Jenkins插件,發現有人添加了不是來自Jenkins存儲庫的插件,而是通過其他團隊的人員手動構建的插件。 這個插件在類路徑上有這個jar。插件刪除後,Jenkins重新啓動郵件開始工作。

1

嘗試重新拋出異常(漁獲),以確保構建失敗並停止

+0

還沒有。日誌是一樣的。 '發送電子郵件到:ppolivka @ xxx.yyy'在日誌中,但沒有收到電子郵件。 –

+0

這對你有幫助嗎? http://stackoverflow.com/questions/37169100/use-jenkins-mailer-inside-pipeline-workflow – Amityo

+0

我基本上從這個問題複製我的代碼。但它不會發送電子郵件。 –