2012-07-06 49 views
15

Estoy tratando de configurar a Jenkins para usar el servidor SMTP de nuestra empresa para enviar notificaciones de compilación por correo electrónico. Estamos utilizando TLS como el método de cifrado en el puerto 587. Sin embargo, parece que no puedo hacer que la notificación por correo electrónico funcione correctamente.Jenkins SMTP TLS

Aquí está mi archivo Hudson.Tasks.Mailer.xml para que pueda ver mi config (He quitado el usuario de autenticación SMTP y la contraseña y ha cambiado ligeramente el smtpHost 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 como este es un problema conocido, desde http://issues.hudson-ci.org/browse/HUDSON-2206

No estoy muy familiarizado con Apple OS (que es la máquina que ejecuta Jenkins) pero pensé que podría resolver el problema utilizando la solución mencionada. No estaba muy seguro de dónde poner solución que, sin embargo, así que traté de 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 

que no aparecieron para resolverlo. Puedo ver esa llamada en la consola cuando Jenkins se pone en marcha, pero cuando trato de un correo electrónico de configuración de la prueba me sale 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 lo más que pueda probar? Intenté cambiar la cuenta de correo electrónico para usar el servidor smtp de gmail y funciona bien, pero prefiero usarlo en nuestro servidor smtp si puedo.

Respuesta

1

probar la solución mencionada en el mismo error:

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

En Java:

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

En Tomcat:

Añadir JAVA_OPTS=-Dmail.smtp.starttls.enable="true" al archivo de configuración de Tomcat.

15

Tuve el mismo problema con Jenkins pero el mío está instalado en Centos en lugar del sistema operativo Apple. Todavía pensaba publicar la solución aquí porque A) es posible que pueda hacer los ajustes necesarios en la solución y B) Linux & Los usuarios de Jenkins podrían beneficiarse de esto.

En cualquier caso, encontrar el archivo de configuración de Jenkins (en su CENTOS en/etc/sysconfig/Jenkins)

En Locate la variable JENKINS_JAVA_OPTIONS y añadir 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 
+5

en Ubuntu, el fichero de configuración Jenkins está en/etc/default/Jenkins – bruThaler

+2

Probé que estoy recibiendo el siguiente error ahora . - Error al enviar el correo electrónico com.sun.mail.smtp.SMTPSendFailedException: 550 5.7.1 El cliente no tiene permisos que enviar como este remitente en com.sun.mail.smtp.SMTPTransport.issueSendCommand (SMTPTransport.java:2057) en com.sun.mail.smtp.SMTPTransport.finishData (SMTPTransport.java:1862) atcom.sun.mail.smtp.SMTPTransport.sendMessage (SMTPTransport.java:1100) en javax.mail.Transport.send0 (Transporte. java: 195) en javax.mail.Transport.send (Transport.java:124) en hudson.tasks.Mailer $ DescriptorImpl.doSendTestMail (Mailer.java:499) –

+5

El "cliente no tiene permisos que enviar como" me molestó hasta que me di cuenta de que no había configurado la "dirección de correo electrónico de administración del sistema" – espenalb

8

Para Jenkins en Windows

Jenkins abiertas.xml y modificar el nodo argumentos

-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dmail.smtp.starttls.enable=true -jar "%BASE%\jenkins.war" --httpPort=8080

Para smtp.live.com:

Set the SMTP port to 587 and uncheck Use SSL

14

enter image description here

Cambiar el puerto SMTP 587-465 resuelto este problema para mí:

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

Por lo que puedo decir (descargo de responsabilidad: de ninguna manera soy un Hud hijo/experto de Jenkins) el complemento de correo electrónico Hudson/Jenkins es compatible con la comunicación SMTP encriptada SSL; sin embargo, esta implementación requiere que las comunicaciones se cifren desde el principio.

Al conectarse en el puerto 587, el servidor en el otro extremo puede esperar un comando STARTTLS (vea este artículo SSL vs TLS vs STARTTLS). Este comando se envía usando texto sin formato para 'actualizar' la conexión para usar SSL/TLS.

Hudson/Jenkins lugar intenta iniciar la negociación de SSL en el puerto 587, que es rechazado rápidamente, dando como resultado el siguiente error:

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

He intentado añadir las opciones de Java sugeridas "-Dmail.smtp.starttls. enable = true "para habilitar TLS:

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

Lamentablemente, 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: Jenkins correo electrónico plug-in siempre necesita credenciales SMTP que a menudo son las credenciales de correo electrónico del remitente cuando se marca de verificación opción "Usar autenticación SMTP" para cualquier "SSL - puerto 465" o "no SSL - puerto 587" configuración.

+2

tks Hombre! ¡Esto resuelve mi problema! –

+0

No sé cómo, pero esto funciona. –

+0

Lamento tener solo un voto a favor. Qué error tan tonto – Cfreak

0

Adición -Dmail.smtp.starttls.enable = true como argumentos de JAVA_OPTS resuelven mi problema

Si sus Jenkins se está ejecutando en el Stand Alone JAVA_OPTS actualizar el modo en/etc/sysconfig/Jenkins Si sus Jenkins se está ejecutando en la actualización de Tomcat JAVA_OPTS

  • catalina.sh para UNIX
  • catalina.bat para las ventanas
3

Incluso popa er configuración -Dmail.smtp.starttls.enable=true como se menciona en @ nsof respuestas en el archivo /etc/default/jenkins (debian/ubuntu), no funcionó para mí.

El truco consistía en establecer el puerto SMTP para y desmarqueUse SSL como se muestra abajo, a continuación, el correo electrónico ha sido enviada.

enter image description here

+0

Por alguna razón, esa es la única forma en que funcionó para mí. Jenkins 2.28 + OpenJDK 8 –

0

Para Jenkins en Ubuntu 16.04:

1 - editar el fichero de configuración:

sudo nano /etc/default/jenkins 

2 - Comentario a cabo JAVA_ARGS existente, agregar uno nuevo 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 

enter image description here

0

Para Jenkins en Red Hat Enterprise Linux Server versión 7.4 (Maipo) editar/etc/sysconfig/Jenkins añadir

enter image description here

El El archivo de configuración del servicio de Jenkins requiere acceso raíz 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 RedHat/CentOS.
  • C: \ Archivos de programa \ Jenkins \ jenkins.xml: ubicación predeterminada para Windows