2013-04-19 15 views
7

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 &lt;[email protected]&gt;</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

  1. 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.

  2. 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.
+0

Czy próbowałeś przenieść '-Djava.net.preferIPv4Stack = true' przed argumentem' -jar'? – NilsH

+0

To zadziałało! Dzięki. Czy możesz to ująć jako odpowiedź, więc mogę to sprawdzić jako najlepszą odpowiedź? –

Odpowiedz

12

Argumenty po argumencie -jar zostaną przekazane do aplikacji, a nie do java vm.Więc spróbuj przenieść -Djava.net.preferIPv4Stack=true przed argumentem -jar.

+0

Czy możesz proszę, jak dodać powyżej -Djava.net.preferIPv4Stack = true .. i używając JDK 7. nie wiem gdzie to dodać – saikiran

0

2.How do I get Jenkins to start up with the -Djava.net.preferIPv4Stack=true parameter and specified run time?

nie jestem pewien co do środowiska wykonawczego Java, ale to, co pracował dla mnie dla parametru: „-Djava.net.preferIPv4Stack = true”.

1) Notatnik "C: \ Program Files (x86) \ Jenkins \ jenkins.xml"

2) Znajdź linię podobną do:

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

3) Przesuń „-Djava. net.preferIPv4Stack = true "część do przed argument -jar. Powinno teraz wyglądać podobnie do:

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

4) Zapisz plik, wyjdź z notatnika.

5) Uruchom ponownie usługę Jenkins

6) wysłać wiadomość testową z "Manage Jenkins -> Konfiguracja systemu" strony internetowej. Wiadomość e-mail powinna teraz działać.

Powiązane problemy