【问题标题】:Jenkins pipeline does not send emails correctlyJenkins 管道无法正确发送电子邮件
【发布时间】:2016-12-06 16:34:18
【问题描述】:

最近我们开始将 jenkins 作业转移到 Jenkins 管道中,但我们在电子邮件发送方面遇到了一些问题。

如果我这样做

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              : "ppolivka@xxx.yyy",
                  sendToIndividuals       : true])
        }
    }
}

电子邮件在作业日志中得到确认,但从未送达。

[Pipeline] {
[Pipeline] sh
[workspace] Running shell script
+ exit 1
[Pipeline] echo
Error
[Pipeline] step
Sending e-mails to: ppolivka@xxx.yyy
[Pipeline] }
[Pipeline] // node

如果我在正常的 Jenkins 工作中做同样的事情,电子邮件就会送达。还会发送来自“管理 Jenkins”中电子邮件配置的测试电子邮件。 我是否需要以某种方式为管道启用电子邮件?

我们正在运行 詹金斯:2.7.2 管道插件 2.2 邮件插件 1.17

我只是尝试通过发送电子邮件

node {
    mail body: 'test', subject: 'test', to: 'ppolivka@xxx.yyy'
}

仍然没有收到任何东西。我在 jenkins 中的电子邮件配置很好,所有其他非管道作业都在发送电子邮件,并且来自电子邮件通知配置的测试电子邮件正在工作。为什么管道电子邮件不会送达?

【问题讨论】:

    标签: jenkins jenkins-plugins jenkins-pipeline


    【解决方案1】:

    我们终于想通了。

    我对管道电子邮件代码进行了一些“调试”。

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

    从这里我注意到使用过的电子邮件传输器是模拟的。

    [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 重新启动后邮件开始工作。

    【讨论】:

      【解决方案2】:

      尝试重新抛出异常(在 catch 中)以确保构建失败并停止

      【讨论】:

      • 还是什么都没有。日志是一样的。 Sending e-mails to: ppolivka@xxx.yyy 在日志中,但未收到电子邮件。
      • 这对您有帮助吗? stackoverflow.com/questions/37169100/…
      • 我基本上是从这个问题中复制了我的代码。但它不会发送电子邮件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      • 2021-04-17
      • 2016-09-28
      • 2012-11-08
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      相关资源
      最近更新 更多