最近我们开始将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中的电子邮件配置很好,所有其他非管道工作都是通过电子邮件通知配置发送电子邮件和测试电子邮件。为什么管道电子邮件无法发送?
答案 0 :(得分:2)
我们终于弄明白了。
我做了一些"调试"管道电子邮件代码。
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重新启动邮件开始工作。
答案 1 :(得分:1)
尝试重新抛出异常(在catch中)以确保构建失败并停止