with script run pass parameter job example jenkins jenkins-plugins

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