私の構成:
- 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 パラメーターが設定されていません。PATH と JAVA_HOME は両方とも IBM ランタイムを指していますが、Jenkins は引き続き Oracle v7 ランタイムで開始されます。Jenkins は、システム Java 7 を開始して取得する新しいプロセスを生成する必要があります。
上記の構成を使用して、Jenkins スクリプト コンソールに移動し、"System.getProperty("java.net.preferIPv4Stack") を使用して問い合わせると、何も取得されません (設定されていません)。そのパラメーターを設定しても、エラーが発生します。コマンド ラインに -Djava.net.preferIPv4Stack=true を追加しても (サービスを使用せずに)、スクリプト コンソールから問い合わせても設定されません。
私の質問
Why am I getting this error and how to I resolve it? Remember that I can write an ANT script that successfully sends email using the same smtp server and java run times.
How do I get Jenkins to start up with the -Djava.net.preferIPv4Stack=true parameter and specified run time?
Some Notes:
- I cannot uninstall Java 7 due to lame corporate issues.
- I cannot install Java 6 due to the same issues.
- I am allowed to install the IBM JDK/JRE.