script - Jenkins SMTP TLS
pass parameters jenkins job (9)
Estoy tratando de configurar a Jenkins para que use el servidor SMTP de nuestra compañía para enviar notificaciones por correo electrónico. Estamos utilizando TLS como el método de cifrado en el puerto 587. Sin embargo, parece que la notificación de correo electrónico no funciona correctamente.
Aquí está mi archivo Hudson.Tasks.Mailer.xml para que pueda ver mi configuración (eliminé el usuario y la contraseña de autenticación SMTP y cambié el smtpHost ligeramente por si acaso)
<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>
Parece que este es un problema conocido, de http://issues.hudson-ci.org/browse/HUDSON-2206
No estoy muy familiarizado con el sistema operativo Apple (que es la máquina que ejecuta Jenkins) pero pensé que podría resolver el problema usando la solución mencionada. No estaba exactamente seguro de dónde poner esa solución, así que intenté ponerlo aquí: / 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
Eso no pareció resolverlo. Puedo ver esa llamada en la consola cuando se inicia Jenkins, pero cuando intento un correo electrónico de configuración de prueba, aparece el siguiente error:
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)
¿Alguna idea sobre qué más puedo probar? He intentado cambiar la cuenta de correo electrónico para usar el servidor smtp de gmail y funciona bien, pero preferiría tenerlo usando nuestro servidor smtp si puedo.
Agregar -Dmail.smtp.starttls.enable = true ya que los argumentos de JAVA_OPTS solucionaron mi problema
Si su jenkins se ejecuta en modo independiente, actualice JAVA_OPTS en / etc / sysconfig / jenkins. Si su jenkins se ejecuta en tomcat update, JAVA_OPTS
- catalina.sh para unix
- catalina.bat para ventanas
Con Jenkins 2.134
me funcionó lo siguiente:
-
JAVA_TOOL_OPTIONS=-Dmail.smtp.starttls.enable=true
- Desmarque
Use SSL
!
Incluso después de configurar -Dmail.smtp.starttls.enable=true
como se menciona en las respuestas de @ nsof en el archivo /etc/default/jenkins
(debian / ubuntu), no funcionó para mí.
El truco consistió en configurar el puerto SMTP en 587 y desmarcar Use SSL
como se muestra a continuación, luego el correo electrónico se envió con éxito.
Para Jenkins en Ubuntu 16.04 :
1 - Editar el archivo de configuración:
sudo nano /etc/default/jenkins
2 - Comente fuera de JAVA_ARGS existente, agregue uno nuevo que se muestra a continuación:
#JAVA_ARGS="-Djava.awt.headless=true"
JAVA_ARGS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
3 - Reiniciar Jenkins
sudo service jenkins restart
Para Jenkins en Red Hat Enterprise Linux Server versión 7.4 (Maipo), edite / etc / sysconfig / jenkins para agregar
El archivo de configuración del servicio Jenkins requiere acceso de root a la máquina. En CloudBees Jenkins Enterprise, puede encontrar este archivo en:
- / etc / default / jenkins: ubicación para la mayoría de las distribuciones de Linux.
- / etc / sysconfig / jenkins: ubicación para la distribución de RedHat / CentOS.
- C: / Archivos de programa / Jenkins / jenkins.xml: ubicación predeterminada para Windows
Pruebe la solución alternativa mencionada en el error:
http://issues.hudson-ci.org/browse/HUDSON-2206
En Java:
props.put("mail.smtp.starttls.enable","true");
En Tomcat:
Agregue JAVA_OPTS=-Dmail.smtp.starttls.enable="true"
al archivo de configuración de tomcat.
Tuve el mismo problema con Jenkins pero el mío está instalado en Centos en lugar de Apple OS. Todavía pensé en publicar la solución aquí porque A) es posible que pueda hacer los ajustes necesarios a la solución y B) los usuarios de Linux y Jenkins podrían beneficiarse de esto.
De todos modos, encuentre el archivo de configuración de Jenkins (en CENTOS está en / etc / sysconfig / jenkins)
En él, ubique la variable JENKINS_JAVA_OPTIONS y agregue la siguiente opción "-Dmail.smtp.starttls.enable = true" En mi caso, esto es lo que tenía antes:
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"
Y esto es después;
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
reiniciar el servidor Jenkins (en Linux)
/etc/init.d/jenkins restart
Para Jenkins en Windows
Abre jenkins.xml y modifica el nodo de argumentos.
-Xrs -Xmx256m -Dhudson.lifecycle = hudson.lifecycle.WindowsServiceLifecycle -mail.smtp.starttls.enable = true -jar "% BASE% / jenkins.war" --httpPort = 8080
Para smtp.live.com:
Establezca el puerto SMTP en 587 y desmarque
Use SSL
Cambiar el puerto SMTP de 587 a 465 resolvió este problema para mí:
SMTP server: smtp.mandrill.com
Use SMTP Authentication: true
Use SSL: true
SMTP Port: 465
Por lo que puedo decir (exención de responsabilidad: no soy en absoluto un experto de Hudson / Jenkins), el complemento de correo electrónico de Hudson / Jenkins es compatible con la comunicación SMTP cifrada con SSL. Sin embargo, esta implementación requiere que las comunicaciones estén cifradas desde el principio.
Al conectarse en el puerto 587, el servidor en el otro extremo puede esperar un comando STARTTLS (consulte este artículo de SSL vs TLS vs STARTTLS ). Este comando se envía mediante texto sin formato para "actualizar" la conexión para usar SSL / TLS.
Hudson / Jenkins, en cambio, intenta iniciar la negociación de SSL en el puerto 587, que se rechaza rápidamente, lo que genera el siguiente error:
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
Intenté agregar las opciones sugeridas de JAVA "-Dmail.smtp.starttls.enable = true" para habilitar TLS:
JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dmail.smtp.starttls.enable=true"
Desafortunadamente esto no resolvió el problema para mí.
Después de cambiar el puerto a 465, la negociación de SSL se realizó correctamente y la comunicación se realizó correctamente.
Espero que ayude.
Nota: el complemento de correo electrónico de Jenkins siempre necesita credenciales SMTP, que a menudo son las credenciales del correo electrónico del remitente cuando marca la opción "Usar autenticación SMTP" para cualquier configuración "SSL - puerto 465" o "no SSL - puerto 587".