Moja konfiguracja:uzyskać java.net.SocketException: Permission denied: połączyć podczas wysyłania wiadomości e-mail w Jenkins
- Windows 7 maszyna
- Java 7
- Jenkins 1,511 uruchomiony jako usługa na koncie lokalnym
Mój plik 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>
Mój plik hudson.tasks.Mailer.xml
<hudson.tasks.Mailer_-DescriptorImpl plugin="[email protected]">
<defaultSuffix>@example.com</defaultSuffix>
<hudsonUrl>http://localhost:8081/</hudsonUrl>
<adminAddress>Jenkins Build Server <[email protected]></adminAddress>
<smtpHost>smtp.example.com</smtpHost>
<useSsl>false</useSsl>
<charset>UTF-8</charset>
</hudson.tasks.Mailer_-DescriptorImpl>
Uwaga: "example.com" podstawiony na mój prawdziwy domenie/e-mail/SMTP.
Kiedy instruować Jenkins, aby wysłać wiadomość testową, otrzymuję ten błąd:
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)
Moje zrozumienie z tego błędu jest to, że jest to błąd w systemie Windows, który jest wystawiony przez Java 7 w odniesieniu do Zapora sieciowa i sposób, w jaki Java 7 używa adresu IPv6 odwzorowanego przez ipv4.
Ten problem został rozwiązany przez dodanie -Djava.net.preferIPv4Stack = true do czasu wykonywania java. Odniosłem sukces dodając - Djava.net.preferIPv4Stack = true na tym komputerze, używając zadania e-mail ANT. Jednak w Jenkinsie nie miałem szczęścia.
Należy zauważyć, że wygląda na to, że plik jenkins.xml jest całkowicie ignorowany. Parametr -Djava.net.preferIPv4Stack = true nie jest ustawiony. PATH i JAVA_HOME wskazują na czas działania IBM, ale Jenkins wciąż rozpoczyna pracę z Oracle v7. Jenkins musi odpalić nowy proces, aby uruchomić i odebrać system java 7.
Korzystając z powyższej konfiguracji, jeśli przejdę do konsoli skryptów Jenkins i przesłucham ją przy użyciu "System.getProperty (" java.net.preferIPv4Stack "), Nie otrzymuję nic (nie ustawiono) .Jeśli ustawię ten parametr, nadal dostaję błąd.Jeśli dodaję -Djava.net.preferIPv4Stack = true do wiersza poleceń (nie używając usługi), to nadal nie jest ustawione, gdy przesłuchiwany przez konsolę skryptowego.
Moje pytania
Dlaczego otrzymuję ten błąd i jak go rozwiązać? Pamiętaj, że mogę WRI skrypt ANT, który pomyślnie wysyła wiadomości e-mail przy użyciu tego samego serwera smtp i czasów uruchamiania java.
Jak ustawić Jenkinsa w uruchomieniu z parametrem -Djava.net.preferIPv4Stack = true i określonym czasem wykonywania?
Niektóre Uwagi:
- Nie mogę odinstalować Java 7 ze względu na kulawych sprawach korporacyjnych.
- Nie mogę zainstalować Java 6 z powodu tych samych problemów.
- Mogę zainstalować IBM JDK/JRE.
Czy próbowałeś przenieść '-Djava.net.preferIPv4Stack = true' przed argumentem' -jar'? – NilsH
To zadziałało! Dzięki. Czy możesz to ująć jako odpowiedź, więc mogę to sprawdzić jako najlepszą odpowiedź? –