2013-04-19 5 views
7

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

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

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

Hai provato a spostare '-Djava.net.preferIPv4Stack = true' prima dell'argomento' -jar'? – NilsH

+0

Questo ha funzionato! Grazie. Puoi metterlo come risposta in modo da poterlo verificare come migliore risposta? –

risposta

12

Gli argomenti dopo l'argomento -jar verranno passati all'applicazione, non a java vm.Quindi prova a spostare -Djava.net.preferIPv4Stack=true prima dell'argomento -jar.

+0

puoi per favore come aggiungere sopra -Djava.net.preferIPv4Stack = true .. io uso JDK 7. non so dove aggiungere questo – saikiran

0

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

non sono sicuro circa il runtime Java, ma questo è ciò che ha funzionato per me per il parametro: "-Djava.net.preferIPv4Stack = true".

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

2) trovare la linea simile a:

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

3) Spostare il "-Djava. net.preferIPv4Stack = true "parte a prima di l'argomento -jar. Ora dovrebbe essere simile a:

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

4) Salvare il file, uscire dal blocco note.

5) Riavviare il servizio Jenkins

6) Invia l'email di prova dalla "Gestione Jenkins -> Configura sistema" pagina web. L'email dovrebbe ora funzionare.

Problemi correlati