我的配置:
我的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服务器。
当我指示詹金斯发送测试电子邮件时,出现以下错误:
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 7中存在一个错误,该错误由Java 7公开,涉及防火墙以及Java 7如何使用ipv4映射的ipv6地址。
据报告,可以通过在Java运行时添加-Djava.net.preferIPv4Stack = true来解决。我已经成功使用ANT电子邮件任务在此计算机上添加-Djava.net.preferIPv4Stack = true。但是,在詹金斯,我没有任何运气。
请注意,jenkins.xml文件似乎已被完全忽略。未设置-Djava.net.preferIPv4Stack = true参数。PATH和JAVA_HOME都指向IBM运行时,但是Jenkins仍然从Oracle v7运行时开始。Jenkins必须产生一个新进程来启动并启动系统Java 7。
使用上述配置,如果我进入Jenkins脚本控制台并使用“ System.getProperty(“ java.net.preferIPv4Stack”)对其进行查询,那么我什么也没得到(未设置)。如果设置了该参数,我仍然会收到错误消息。如果我将- Djava.net.preferIPv4Stack = true添加到命令行(不使用服务),则在通过脚本控制台进行查询时仍未设置。
我的问题
为什么会出现此错误以及如何解决?请记住,我可以编写一个ANT脚本,该脚本使用相同的smtp服务器和Java运行时间成功发送电子邮件。
如何让Jenkins使用-Djava.net.preferIPv4Stack = true参数和指定的运行时间启动?
一些注意事项:
参数后的-jar参数将传递给应用程序,而不是Java vm。因此,尝试-Djava.net.preferIPv4Stack=true在-jar论点之前 移动 。
-jar
-Djava.net.preferIPv4Stack=true