8

我的配置:

  • Windows 7 机器
  • 爪哇 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 &lt;do-not-reply@example.com&gt;</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)

我对这个错误的理解是,Java 7 暴露了 Windows 中的一个错误,涉及防火墙以及 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 添加到命令行(不使用该服务),则在通过脚本控制台询问时仍未设置。

我的问题

  1. 为什么我会收到此错误以及如何解决?请记住,我可以编写一个使用相同的 smtp 服务器和 java 运行时间成功发送电子邮件的 ANT 脚本。

  2. 如何让 Jenkins 使用 -Djava.net.preferIPv4Stack=true 参数和指定的运行时间启动?

一些注意事项:

  • 由于蹩脚的公司问题,我无法卸载 Java 7。
  • 由于同样的问题,我无法安装 Java 6。
  • 我被允许安装 IBM JDK/JRE。
4

2 回答 2

12

参数后面的-jar参数将传递给应用程序,而不是 java vm。所以尝试 在争论-Djava.net.preferIPv4Stack=true之前 移动。-jar

于 2013-04-20T05:21:01.480 回答
1

2.如何让Jenkins以-Djava.net.preferIPv4Stack=true参数和指定的运行时间启动?

我不确定 Java 运行时,但这是对我有用的参数:“-Djava.net.preferIPv4Stack=true”。

1) 记事本“C:\Program Files (x86)\Jenkins\jenkins.xml”

2)找到类似的行:

<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 -Djava.net.preferIPv4Stack=true</arguments>

3) 将“-Djava.net.preferIPv4Stack=true”部分移到-jar 参数之前。它现在应该类似于:

<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Djava.net.preferIPv4Stack=true -jar "%BASE%\jenkins.war" --httpPort=8080</arguments>

4) 保存文件,退出记事本。

5)重启jenkins服务

6) 从“Manage Jenkins -> Configure System”网页发送测试邮件。电子邮件现在应该可以工作了。

于 2015-01-15T23:12:30.967 回答