2012-07-06 7 views
15

Ich versuche Jenkins einzurichten, den SMTP-Server unseres Unternehmens zu verwenden, um Benachrichtigungen per E-Mail zu senden. Wir verwenden TLS als Verschlüsselungsmethode für Port 587. Ich kann jedoch nicht davon ausgehen, dass die E-Mail-Benachrichtigung ordnungsgemäß funktioniert.Jenkins SMTP TLS

Hier meine Hudson.Tasks.Mailer.xml Datei ist, so dass Sie meine Config sehen kann (ich habe den SMTP-Auth-Benutzer und Passwort entfernt und verändert die SMTPHost leicht für alle Fälle)

<hudson.tasks.Mailer_-DescriptorImpl> 
    <helpRedirect/> 
    <defaultSuffix></defaultSuffix> 
    <hudsonUrl>http://localhost:8080/</hudsonUrl> 
    <smtpAuthUsername></smtpAuthUsername> 
    <smtpAuthPassword></smtpAuthPassw$ 
    <adminAddress></adminAddress> 
    <smtpHost>pod#####.outlook.com</smtpHost> 
    <useSsl>true</useSsl> 
    <smtpPort>587</smtpPort> 
    <charset>UTF-8</charset> 
</hudson.tasks.Mailer_-DescriptorImpl> 

Es sieht Dies ist ein bekanntes Problem, von http://issues.hudson-ci.org/browse/HUDSON-2206

Ich bin nicht sehr vertraut mit Apple OS (das ist die Maschine, die Jenkins läuft), aber ich dachte, ich könnte das Problem mit der erwähnten Problemumgehung beheben. Ich war nicht ganz sicher, wo aber, dass Abhilfe zu setzen, so versuchte ich es hier setzen: /Library/Application Support/Jenkins/jenkins-runner.sh

defaults="defaults read /Library/Preferences/org.jenkins-ci" 

war=`$defaults war` || war="/Applications/Jenkins/jenkins.war" 

javaArgs="-Dmail.smtp.starttls.enable=\"true\"" 
heapSize=`$defaults heapSize` && javaArgs="$javaArgs -Xmx${heapSize}" 
permGen=`$defaults permGen` && javaArgs="$javaArgs -XX:MaxPermSize=${permGen}" 

home=`$defaults JENKINS_HOME` && export JENKINS_HOME="$home" 

add_to_args() { 
    val=`$defaults $1` && args="$args --${1}=${val}" 
} 

args="" 
add_to_args prefix 
add_to_args httpPort 
add_to_args httpListenAddress 
add_to_args httpsPort 
add_to_args httpsListenAddress 
add_to_args ajp13Port 
add_to_args ajp13ListenAddress 

echo "JENKINS_HOME=$JENKINS_HOME" 
echo "Jenkins command line for execution" 
echo /usr/bin/java $javaArgs -jar "$war" $args 
exec /usr/bin/java $javaArgs -jar "$war" $args 

, die es nicht zu lösen schien. Ich kann diesen Anruf in der Konsole angezeigt, wenn Jenkins in Betrieb genommen wird, aber wenn ich eine Testkonfiguration E-Mail versuche ich die folgende Fehlermeldung erhalten:

Failed to send out e-mail 

javax.mail.MessagingException: Could not connect to SMTP host: pod#####.outlook.com, port: 587; 
nested exception is: 
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? 
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:317) 
at javax.mail.Service.connect(Service.java:176) 
at javax.mail.Service.connect(Service.java:125) 
at javax.mail.Transport.send0(Transport.java:194) 

Irgendwelche Ideen auf, was ich sonst noch versuchen kann? Ich habe versucht, den E-Mail-Account zu wechseln, um den SMTP-Server von Google Mail zu verwenden, und das funktioniert gut, aber ich würde es lieber mit unserem SMTP-Server haben, wenn ich kann.

Antwort

1

Versuchen Sie die Problemumgehung in der Bug selbst erwähnt aus:

http://issues.hudson-ci.org/browse/HUDSON-2206

In Java:

props.put("mail.smtp.starttls.enable","true"); 

In Tomcat:

JAVA_OPTS=-Dmail.smtp.starttls.enable="true" zu tomcat Konfigurationsdatei hinzufügen.

15

Ich hatte das gleiche Problem mit Jenkins, aber meiner ist auf Centos statt Apple OS installiert. Ich dachte immer noch, die Lösung hier zu posten, weil A) Sie in der Lage sein könnten, die notwendigen Anpassungen an die Lösung vorzunehmen und B) Linux & Jenkins-Benutzer könnten davon profitieren.

Auf jeden Fall finden die Jenkins-Konfigurationsdatei (in CENTOS seine in/etc/sysconfig/jenkins)

In den JENKINS_JAVA_OPTIONS Variable suchen und fügen Sie die folgende Option "-Dmail.smtp.starttls.enable = true" In meinem Fall ist es das, was ich hatte vor:

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true" 

Und das nach ist;

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true" 

Neustart Jenkins Server (in Linux)

/etc/init.d/jenkins restart 
+5

in Ubuntu ist die jenkins Konfigurationsdatei in/etc/default/jenkins – bruThaler

+2

Ich habe versucht, dass ich die folgende Störung erhalte jetzt . - Fehler beim Senden der E-Mail com.sun.mail.smtp.SMTPSendFailedException: 550 5.7.1 Der Client hat keine Berechtigungen zum Senden als dieser Absender an com.sun.mail.smtp.SMTPTransport.issueSendCommand (SMTPTransport.java:2057) unter com.sun.mail.smtp.SMTPTransport.finishData (SMTPTransport.java:1862) atcom.sun.mail.smtp.SMTPTransport.sendMessage (SMTPTransport.java:1100) bei javax.mail.Transport.send0 (Transport. java: 195) bei javax.mail.Transport.send (Transport.java:124) bei hudson.tasks.Mailer $ DescriptorImpl.doSendTestMail (Mailer.java:499) –

+5

Der "Client hat keine Berechtigungen zum Senden als" stört mich bis ich merkte, dass ich die "System Admin E-Mail Adresse" – espenalb

8

Für Jenkins auf Windows

öffnen jenkins.xml und ändern Sie die Argumente Knoten

-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dmail.smtp.starttls.enable=true -jar "%BASE%\jenkins.war" --httpPort=8080

Für smtp.live.com:

Set the SMTP port to 587 and uncheck Use SSL

14

enter image description here

Ändern des SMTP-Port 587-465 dieses Problem für mich gelöst:

SMTP server:    smtp.mandrill.com 
Use SMTP Authentication: true 
Use SSL:     true 
SMTP Port:     465 

Von dem, was ich sagen kann (Disclaimer: Ich bin keineswegs ein Hud Sohn/Jenkins Experte) Das Hudson/Jenkins E-Mail-Plugin unterstützt SSL-verschlüsselte SMTP-Kommunikation - jedoch erfordert diese Implementierung, dass die Kommunikation von Anfang an verschlüsselt wird.

Beim Anschluss an Port 587 kann der Server am anderen Ende einen STARTTLS-Befehl erwarten (siehe Artikel SSL vs TLS vs STARTTLS). Dieser Befehl wird im Klartext gesendet, um die Verbindung zur Verwendung von SSL/TLS zu "aktualisieren".

Hudson/Jenkins versucht stattdessen Verhandlungen SSL auf Port 587 zu starten, die prompt abgelehnt wird, in den folgenden Fehlern führen:

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection? 

Ich habe versucht, die vorgeschlagenen JAVA-Optionen „-Dmail.smtp.starttls hinzufügen. enable = true "aktivieren" TLS:

Leider hat dies das Problem für mich nicht gelöst.

Nachdem der Port auf 465 geändert wurde, ist die SSL-Aushandlung korrekt erfolgt und die Kommunikation erfolgreich abgeschlossen.

Hoffe, dass hilft.

Hinweis: Jenkins E-Mail-Plugin benötigt immer SMTP-Anmeldeinformationen, die häufig die E-Mail-Anmeldeinformationen des Absenders sind, wenn Sie die Option "SMTP-Authentifizierung verwenden" für jede Konfiguration "SSL-Port 465" oder "Nicht SSL-Port 587" aktivieren.

+2

tks Mann! Das löst mein Problem! –

+0

Ich weiß nicht wie, aber das funktioniert. –

+0

Ich bedauere, dass ich nur eine Aufzählung zu geben habe. Was für ein dummer Fehler – Cfreak

0

Hinzufügen -Dmail.smtp.starttls.enable = true als Argumente von JAVA_OPTS mein Problem gelöst

Wenn Ihr jenkins im Stand-Alone-Modus Update JAVA_OPTS in/etc läuft/sysconfig/jenkins Wenn Ihr jenkins läuft in tomcat Update JAVA_OPTS

  • catalina.sh für Unix
  • catalina.bat für Fenster
3

Selbst achtern er Einstellung -Dmail.smtp.starttls.enable=true wie in @ nsof Antworten in der Datei /etc/default/jenkins (debian/ubuntu) erwähnt, hat es nicht für mich funktioniert.

Der Trick war, den SMTP-Port auf und uncheckUse SSL wie unten gezeigt einstellen, dann die E-Mail erfolgreich gesendet wurde.

enter image description here

+0

Aus irgendeinem Grund, das ist die einzige Möglichkeit, die es für mich funktioniert hat. Jenkins 2.28 + OpenJDK 8 –

0

Für Jenkins auf Ubuntu 16.04:

1 - Bearbeiten Sie die Konfigurationsdatei: -:

sudo nano /etc/default/jenkins 

2 Kommentieren Sie JAVA_ARGS bestehende, neue unten hinzufügen

#JAVA_ARGS="-Djava.awt.headless=true" 
JAVA_ARGS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true" 

3 - Restart Jenkins

sudo service jenkins restart 

enter image description here

0

Für Jenkins auf Red Hat Enterprise Linux Server Version 7.4 (Maipo) Datei/etc/sysconfig/jenkins

enter image description here

Die hinzufügen Die Jenkins-Dienstkonfigurationsdatei erfordert Root-Zugriff auf den Computer. In CloudBees Jenkins Enterprise können Sie diese Datei finden Sie unter:

  • /etc/default/jenkins: Standort für die meisten der Linux-Distributionen.
  • /etc/sysconfig/jenkins: Speicherort für die RedHat/CentOS-Verteilung.
  • C: \ Programme \ Jenkins \ jenkins.xml: Standardverzeichnis für Windows