J'essaie de configurer Jenkins pour qu'il utilise le serveur SMTP de notre société pour envoyer des notifications de génération par courrier électronique. Nous utilisons TLS comme méthode de cryptage sur le port 587. Toutefois, la notification par courrier électronique ne semble pas fonctionner correctement.
Voici mon fichier Hudson.Tasks.Mailer.xml afin que vous puissiez voir ma configuration (j'ai supprimé l'utilisateur et le mot de passe d'authentification SMTP et modifié légèrement le smtpHost 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>
Il semble que ce soit un problème connu, tiré de http://issues.hudson-ci.org/browse/HUDSON-2206
Je ne connais pas très bien Apple OS (la machine qui exécute Jenkins), mais je pensais pouvoir résoudre le problème en utilisant la solution de contournement mentionnée. Je ne savais pas exactement où mettre cette solution de contournement, alors j’essayais de la 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 $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
Cela n'a pas semblé le résoudre. Je peux voir cet appel dans la console lorsque Jenkins est démarré, mais lorsque je tente un courrier électronique de configuration de test, l'erreur suivante apparaît:
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)
Des idées sur quoi d'autre je peux essayer? J'ai essayé de changer le compte de messagerie pour utiliser le serveur smtp de gmail et cela fonctionne bien, mais je préférerais qu'il utilise notre serveur smtp si je le peux.
Changer le port SMTP de 587 à 465 a résolu ce problème pour moi:
SMTP server: smtp.mandrill.com
Use SMTP Authentication: true
Use SSL: true
SMTP Port: 465
D'après ce que je peux dire (disclaimer: je ne suis en aucun cas un expert de Hudson/Jenkins))} , Le plug-in de messagerie Hudson/Jenkins prend en charge la communication SMTP cryptée SSL, mais cette implémentation requiert que les communications soient cryptées. dès le départ.
Lors de la connexion sur le port 587, le serveur à l'autre extrémité peut s'attendre à une commande STARTTLS (voir ceci SSL vs TLS vs STARTTLS article). Cette commande est envoyée en texte brut pour «mettre à niveau» la connexion afin d’utiliser SSL/TLS.
Hudson/Jenkins tente à la place de commencer à négocier le protocole SSL sur le port 587, qui est rapidement rejeté, ce qui entraîne 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 moi.
Après la modification du port sur 465, la négociation SSL s'est déroulée correctement et la communication a abouti.
J'espère que cela pourra aider.
Remarque: Le plug-in de messagerie Jenkins a toujours besoin d'informations d'identification SMTP, qui sont souvent les informations d'identification de messagerie 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. Je pensais toujours poster la solution ici car A), vous pourriez peut-être apporter les ajustements nécessaires à la solution et B) les utilisateurs de Linux & Jenkins pourraient en tirer parti.
Quoi qu'il en soit, recherchez le fichier de configuration Jenkins (dans CENTOS, dans/etc/sysconfig/jenkins).
Dans celui-ci, localisez la variable JENKINS_Java_OPTIONS et ajoutez l'option suivante "-Dmail.smtp.starttls.enable = true" Dans mon cas, voici ce que j'avais auparavant:
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 le serveur Jenkins (sous Linux)
/etc/init.d/jenkins restart
Pour Jenkins sous Windows
Ouvrez jenkins.xml et modifiez le noeud des arguments
-Xrs -Xmx256m -Dhudson.lifecycle = hudson.lifecycle.WindowsServiceLifecycle -Dmail.smtp.starttls.enable = true -jar "% BASE%\jenkins.war" --httpPort = 8080
Pour smtp.live.com:
Définissez le port SMTP sur 587 et décochez
Use SSL
Même après avoir défini -Dmail.smtp.starttls.enable=true
comme indiqué dans les réponses de @ nsof dans le fichier /etc/default/jenkins
(debian/ubuntu), cela ne fonctionnait pas pour moi.
L'astuce consistait à définir le port SMTP sur 587 et décocher Use SSL
comme indiqué ci-dessous, puis l'e-mail a été envoyé avec succès.
Essayez la solution de contournement mentionnée dans le bogue lui-même:
http://issues.hudson-ci.org/browse/HUDSON-2206
En Java:
props.put("mail.smtp.starttls.enable","true");
Dans Tomcat:
Ajoutez Java_OPTS=-Dmail.smtp.starttls.enable="true"
au fichier de configuration Tomcat.
Pour Jenkins sur Ubuntu 16.04 :
1 - Editez le fichier de configuration:
Sudo nano /etc/default/jenkins
2 - Mettez en commentaire les Java_ARGS existants, ajoutez-en un nouveau ci-dessous:
#Java_ARGS="-Djava.awt.headless=true"
Java_ARGS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
3 - Redémarrer Jenkins
Sudo service jenkins restart
Avec Jenkins 2.134
, les éléments suivants ont fonctionné pour moi:
Java_TOOL_OPTIONS=-Dmail.smtp.starttls.enable=true
Use SSL
!Pour Jenkins sur Red Hat Enterprise Linux Server version 7.4 (Maipo) , Modifiez/etc/sysconfig/jenkins pour 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:
L'ajout de -Dmail.smtp.starttls.enable = true comme arguments de Java_OPTS a résolu mon problème.
Si votre jenkins fonctionne en mode autonome, mettez à jour Java_OPTS dans/etc/sysconfig/jenkins Si votre jenkins est en cours d'exécution dans la mise à jour de Tomcat, Java_OPTS