我的配置:
- Windows 7机器
- Java 7
- Jenkins 1.511以本地帐户服务运行
我的jenkins.xml文件
<service>
<id>jenkins</id>
<name>Jenkins</name>
<env name="JENKINS_HOME" value="%BASE%"/>
<executable>C:\Program Files\IBM\SDP8.5\jdk\bin\java.exe</executable>
<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 -Djava.net.preferIPv4Stack=true</arguments>
</service>
我的 hudson.tasks.Mailer.xml 文件
<hudson.tasks.Mailer_-DescriptorImpl plugin="mailer@1.4">
<defaultSuffix>@example.com</defaultSuffix>
<hudsonUrl>http://localhost:8081/</hudsonUrl>
<adminAddress>Jenkins Build Server <do-not-reply@example.com></adminAddress>
<smtpHost>smtp.example.com</smtpHost>
<useSsl>false</useSsl>
<charset>UTF-8</charset>
</hudson.tasks.Mailer_-DescriptorImpl>
注意:"example.com"是我真正的域名/电子邮件/SMTP服务器的替代品。
当我要求Jenkins发送测试电子邮件时,出现以下错误:
Failed to send out e-mail
javax.mail.MessagingException: Could not connect to SMTP host: smtp.example.com, port: 25;
nested exception is:
java.net.SocketException: Permission denied: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638)
at javax.mail.Service.connect(Service.java:295)
我的理解是,在Windows中存在一个错误,Java 7暴露了这个错误,涉及到防火墙以及Java 7如何使用ipv4映射的ipv6地址。可以通过在Java运行时添加-Djava.net.preferIPv4Stack=true来解决这个问题。我在这台机器上使用ANT电子邮件任务添加-Djava.net.preferIPv4Stack=true成功了。但是,在Jenkins上,我没有成功过。需要注意的是,jenkins.xml文件似乎被完全忽略了。-Djava.net.preferIPv4Stack=true参数没有被设置。路径和JAVA_HOME都指向IBM运行时,但Jenkins仍然使用Oracle v7运行时启动。Jenkins必须生成一个新进程来启动,并选择系统Java 7。使用以上配置,如果我进入Jenkins脚本控制台并使用"System.getProperty("java.net.preferIPv4Stack")"进行询问,我得不到任何消息(未设置)。如果我设置该参数,仍然会出现错误。如果我在命令行中添加-Djava.net.preferIPv4Stack=true(不使用服务),当通过脚本控制台进行调查时,它仍未被设置。 我的问题是:
1.我为什么会收到这个错误,并如何解决它?请记住,我可以编写一个ANT脚本,使用相同的SMTP服务器和Java运行时成功发送电子邮件。
2.如何让Jenkins以指定的运行时和-Djava.net.preferIPv4Stack=true参数启动?
一些注意事项:
1.由于某些无聊的企业问题,我无法卸载Java 7。
2.由于同样的问题,我无法安装Java 6。
3.我可以安装IBM JDK/JRE。