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.
9 réponses
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".
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
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
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
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.
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
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
pour Jenkins sur Red Hat Enterprise Linux Server Version 7.4 (Maipo) éditez le fichier /etc/sysconfig/jenkins, ajouter
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
Avec Jenkins 2.134
la suite fonctionné pour moi:
JAVA_TOOL_OPTIONS=-Dmail.smtp.starttls.enable=true
- Décocher la case
Use SSL
!