Jenkins SMTP TLS

J'essaie de configurer Jenkins pour qu'il utilise le serveur SMTP de notre entreprise pour envoyer des notifications de construction. Nous utilisons TLS comme méthode de cryptage sur le port 587. Je ne peux pas sembler obtenir la notification par e-mail pour fonctionner correctement cependant.

Voici mon Hudson.Tâche.Mailer.fichier xml pour que vous puissiez voir ma configuration (j'ai supprimé l'utilisateur SMTP auth et le mot de passe et j'ai changé légèrement le smtpHost juste au cas où)

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

on dirait que c'est un problème connu, de http://issues.hudson-ci.org/browse/HUDSON-2206

Je ne suis pas très familier avec Apple OS (qui est la machine qui exécute Jenkins) mais j'ai pensé que je pourrais résoudre le problème en utilisant la solution de contournement mentionnée. Je ne savais pas exactement où mettre ce contournement, donc j'ai essayé de le mettre ici: / Bibliothèque / 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 ` && args="$args --=${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

cela n'a pas semblé le résoudre. Je peux voir cet appel dans la console quand Jenkins est lancé. jusqu', mais lorsque je tente un test de configuration de mail, je reçois l'erreur suivante:

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)

avez-vous une idée de ce que je peux essayer d'autre? J'ai essayé de changer le compte de messagerie pour utiliser le serveur smtp de gmail et cela fonctionne très bien, mais je préfère l'avoir en utilisant notre serveur smtp si je peux.

17
demandé sur groverboy 2012-07-07 02:12:16

9 réponses

enter image description here

changement du port SMTP de 587 à 465 résolu ce problème pour moi:

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

De ce que je peux dire (disclaimer: je ne suis pas un Hudson/Jenkins expert) le plugin email Hudson/Jenkins prend en charge la communication SMTP cryptée par SSL - mais cette implémentation nécessite que les communications soient cryptées dès le début.

lors de la connexion sur le port 587, le serveur à l'autre bout peut s'attendre à un STARTTLS de commande (voir ce SSL vs TLS vs STARTTLS l'article). Cette commande est envoyée en texte clair pour "mettre à niveau" la connexion afin d'utiliser SSL/TLS.

Hudson / Jenkins tente plutôt de commencer à négocier SSL sur le port 587, ce qui est rapidement rejeté, résultant en l'erreur suivante:

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

j'ai essayé d'ajouter les options JAVA suggérées " - Dmail.SMTP.starttls.enable=true " pour activer TLS:

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

malheureusement cela n'a pas résolu le problème pour je.

après avoir changé le port à 465, la négociation SSL s'est déroulée correctement et la communication a réussi.

j'Espère que vous aide.

Remarque: Jenkins email plugin a toujours besoin de justificatifs SMTP qui sont souvent les justificatifs d'identité de l'expéditeur lorsque vous cochez l'option "Utiliser L'authentification SMTP" pour toute configuration "SSL - port 465" ou "non SSL - port 587".

19
répondu jiwanrai 2018-03-04 13:13:49

J'ai eu le même problème avec Jenkins mais le mien est installé sur Centos plutôt que sur Apple OS. J'ai quand même pensé à poster la solution ici parce que A) vous pourriez être en mesure de faire les ajustements nécessaires à la solution et B) les utilisateurs Linux et Jenkins pourraient en bénéficier.

de toute façon, trouver le Jenkins fichier de configuration (CENTOS son dans /etc/sysconfig/jenkins)

localisez la variable JENKINS_JAVA_OPTIONS et ajoutez l'option suivante - Dmail.SMTP.starttls.enable=true" Dans mon cas, c'est ce que j'avais avant:

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

Et c'est après;

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

redémarrer Jenkins serveur (sous Linux)

/etc/init.d/jenkins restart
16
répondu nsof 2013-05-23 14:40:15

Pour Jenkins sur Windows

Ouvrir jenkins.xml et modifier le noeud d'arguments

- XRS-Xmx256m-Dhudson.cycle de vie=hudson.cycle de vie.WindowsServiceLifecycle -Dmail.SMTP.starttls.enable=true - jar "%BASE%\jenkins.de la guerre" --httpPort=8080

Pour smtp.live.com:

Réglez le port SMTP sur 587 et décochez Use SSL

9
répondu kaloyan 2016-04-01 05:37:41

Même après le réglage de -Dmail.smtp.starttls.enable=true comme indiqué dans les réponses de @nsof dans le fichier /etc/default/jenkins (debian / ubuntu), ça n'a pas marché pour moi.

le truc était de mettre le port SMTP à 587 et décocher la case

enter image description here

3
répondu iTech 2016-01-01 04:54:55

Essayez la solution mentionnée dans le bug lui-même:

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

En Java:

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

Dans Tomcat:

Ajouter JAVA_OPTS=-Dmail.smtp.starttls.enable="true" au fichier de configuration tomcat.

1
répondu ATOzTOA 2013-03-14 08:47:36

Ajouter-Dmail.SMTP.starttls.enable=true comme arguments de JAVA_OPTS résolu mon problème

si votre jenkins est en mode autonome update JAVA_OPTS dans / etc/sysconfig / jenkins Si votre jenkins est en cours d'exécution dans Tomcat update JAVA_OPTS

  • catalina.sh pour unix
  • catalina.bat pour windows
0
répondu Abid 2014-09-02 14:03:12

Pour Jenkins sur Ubuntu 16.04:

1 - éditer le fichier de configuration:

sudo nano /etc/default/jenkins

2 - Commentaire existant JAVA_ARGS, en ajouter de nouveaux indiqué ci-dessous:

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

3-Redémarrez Jenkins

sudo service jenkins restart

enter image description here

0
répondu Paul Lockwood 2017-05-04 14:11:28

pour Jenkins sur Red Hat Enterprise Linux Server Version 7.4 (Maipo) éditez le fichier /etc/sysconfig/jenkins, ajouter

enter image description here

le fichier de configuration du service Jenkins nécessite un accès root à la machine. Dans CloudBees Jenkins Enterprise, vous pouvez trouver ce fichier sous:

  • / etc/default / jenkins: localisation de la plupart des distributions Linux.
  • /etc/sysconfig/jenkins: localisation de RedHat / CentOS distribution.
  • C:\Program dossiers \ Jenkins\jenkins.xml: emplacement par défaut pour Windows
0
répondu Alferd Nobel 2017-11-07 21:27:14

Avec Jenkins 2.134 la suite fonctionné pour moi:

  • JAVA_TOOL_OPTIONS=-Dmail.smtp.starttls.enable=true
  • Décocher la caseUse SSL!
0
répondu schnatterer 2018-09-11 09:23:39