La mia configurazione:Ottengo java.net.SocketException: Autorizzazione negata: il collegamento per l'invio di una e-mail a Jenkins
- Windows 7 macchina
- Java 7
- Jenkins 1.511 eseguito come servizio su Account locale
Il mio file 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>
Il mio file 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>
Nota: "example.com" sostituito per la mia e-mail server di dominio reale// smtp.
Quando ho istruire Jenkins per inviare un messaggio di prova, ottengo questo errore:
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)
mia comprensione con questo errore, è che c'è un bug in Windows che è esposto da Java 7 per quanto riguarda la Firewall e in che modo Java 7 utilizza un indirizzo IPv6 mappato ipv4.
Questo problema viene risolto aggiungendo -Djava.net.preferIPv4Stack = true al tempo di esecuzione java. Ho avuto successo con l'aggiunta di -Djava.net.preferIPv4Stack = true su questa macchina utilizzando l'attività e-mail ANT. Tuttavia, a Jenkins, non ho avuto fortuna.
Nota che sembra che il file jenkins.xml sia stato completamente ignorato. Il parametro -Djava.net.preferIPv4Stack = true non è impostato. Sia PATH che JAVA_HOME puntano entrambi al tempo di esecuzione di IBM, ma Jenkins inizia ancora con Oracle v7 run time. Jenkins deve generare un nuovo processo per avviare e raccogliere il sistema java 7.
Utilizzando la configurazione precedente, se vado alla console di scripting Jenkins e lo interrogo utilizzando "System.getProperty (" java.net.preferIPv4Stack ")), Non ottengo nulla (non impostato) Se imposto quel parametro, ottengo ancora l'errore.Se aggiungo -Djava.net.preferIPv4Stack = true alla riga di comando (non usando il servizio), non è ancora impostato quando interrogato tramite la console di scripting.
le mie domande
Perché mi appare questo errore e come ho risolverlo? Ricordati che posso WRI uno script ANT che invia correttamente e-mail utilizzando lo stesso server smtp e tempi di esecuzione java.
Come si avvia Jenkins con -Djava.net.preferIPv4Stack = parametro true e ora di esecuzione specificata?
Alcune note:
- Non riesco a disinstallare Java 7 a causa di problemi aziendali Lame.
- Non riesco a installare Java 6 a causa degli stessi problemi.
- Sono autorizzato ad installare IBM JDK/JRE.
Hai provato a spostare '-Djava.net.preferIPv4Stack = true' prima dell'argomento' -jar'? – NilsH
Questo ha funzionato! Grazie. Puoi metterlo come risposta in modo da poterlo verificare come migliore risposta? –