Jenkins SMTP TLS

Я пытаюсь настроить Jenkins на использование нашего SMTP-сервера нашей компании для отправки уведомлений по электронной почте. Мы используем TLS в качестве метода шифрования на порту 587. Я не могу заставить почтовое уведомление работать исправно, хотя.

Вот мой файл Hudson.Tasks.Mailer.xml, чтобы вы могли видеть мою конфигурацию (я удалил пользователя и пароль SMTP auth и немного изменил smtpHost на всякий случай)

<hudson.tasks.mailer_-descriptorimpl> <helpredirect> <hudsonurl>http://localhost:8080/</hudsonurl> <smtpauthpassword> <smtphost>pod#####.outlook.com</smtphost> <usessl>true</usessl> <smtpport>587</smtpport> <charset>UTF-8</charset>
</smtpauthpassword></helpredirect></hudson.tasks.mailer_-descriptorimpl>

Похоже, это известная проблема: http://issues.hudson-ci.org/browse/HUDSON-2206

Я не очень хорошо знаком с Apple OS (это машина, на которой работает Jenkins), но я подумал, что могу решить проблему, используя упомянутый обходной путь. Я не был точно уверен, где установить это обходное решение, поэтому я попытался поставить его здесь: /Library/ Поддержка приложений /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

Это не помогло решить проблему. Я вижу этот вызов в консоли, когда Jenkins запущен, но когда я пытаюсь настроить тестовую конфигурацию, я получаю следующую ошибку:

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)

Любые идеи о том, что еще я могу попробовать? Я попытался переключить учетную запись электронной почты, чтобы использовать gmail smtp-сервер, и это работает нормально, но я бы предпочел использовать его с помощью нашего smtp-сервера, если смогу.

8 ответов

У меня была такая же проблема с Дженкинсом, но моя была установлена ​​на Centos, а не на Apple OS. Я все еще думал разместить здесь решение, потому что A) вы могли бы внести необходимые корректировки в решение, и B) пользователи Linux и Jenkins могли бы воспользоваться этим.

Во всяком случае, найдите конфигурационный файл Jenkins (в CENTOS его в /etc/sysconfig/jenkins )

В нем найдите переменную JENKINS_JAVA_OPTIONS и добавьте следующую опцию "-Dmail.smtp.starttls.enable = true" В моем случае это то, что я имел раньше:

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true"

И это после:

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

перезапустить сервер Jenkins (в Linux)

/etc/init.d/jenkins restart


Изменение SMTP-порта с 587 по 465 разрешило эту проблему для меня:

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

Из того, что я могу сказать (отказ от ответственности: я отнюдь не эксперт Хадсона/Дженкинса) плагин электронной почты Hudson/Jenkins поддерживает SSL-шифрованную SMTP-связь, однако для этой реализации требуется, чтобы связь шифровалась с самого начала.

При подключении к порту 587 сервер на другом конце может ожидать команду STARTTLS (см. статью SSL против TLS vs STARTTLS). Эта команда отправляется с использованием обычного текста для "обновления" соединения для использования SSL/TLS.

Хадсон/Дженкинс вместо этого пытается начать переговоры по SSL на порту 587, который незамедлительно отклоняется, что приводит к следующей ошибке:

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

Я попробовал добавить предложенные опции JAVA "-Dmail.smtp.starttls.enable = true", чтобы включить TLS:

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

К сожалению, это не решило проблему для меня.

После изменения порта на 465 согласование SSL произошло правильно, и связь прошла успешно.

Надеюсь, что это поможет.


Для Jenkins в Windows

Откройте jenkins.xml и измените аргументы node

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

Для smtp.live.com:

Установите SMTP-порт на 587 и снимите флажок <code>Use SSL</code>


Даже после установки -Dmail.smtp.starttls.enable=true, как упоминалось в @nsof ответах в файле /etc/default/jenkins (debian/ubuntu), это не сработало для меня.

Трюк состоял в том, чтобы установить SMTP-порт на 587 и снять отметку Use SSL, как показано ниже, после чего письмо было успешно отправлено.


Попробуйте обходное решение, упомянутое в самой ошибке:

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

В Java:

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

В Tomcat:

Добавить JAVA_OPTS=-Dmail.smtp.starttls.enable="true" в файл конфигурации tomcat.


Добавление -Dmail.smtp.starttls.enable = true, поскольку аргументы JAVA_OPTS решили мою проблему

Если ваши jenkins работают в автономном режиме, обновите JAVA_OPTS в /etc/sysconfig/jenkins Если ваши jenkins запущены в обновлении tomcat JAVA_OPTS

  • catalina.sh для unix
  • catalina.bat для Windows


Для Дженкинса на Ubuntu 16.04:

1 - отредактируйте файл конфигурации:

sudo nano /etc/default/jenkins

2 - Прокомментируйте существующий JAVA_ARGS, добавьте новый, показанный ниже:

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

3 - Перезапустить Дженкинса

sudo service jenkins restart


Для Jenkins на Red Hat Enterprise Linux Server версии 7.4 (*****) отредактируйте /etc/sysconfig/jenkins, чтобы добавить

Конфигурационный файл службы Jenkins требует корневого доступа к машине. В CloudBees Jenkins Enterprise вы можете найти этот файл под:

  • /etc/default/jenkins: расположение большинства дистрибутивов Linux.
  • /etc/sysconfig/jenkins: место для дистрибутива RedHat/CentOS.
  • C:\Program Files\Jenkins\jenkins.xml: местоположение по умолчанию для Windows

licensed under cc by-sa 3.0 with attribution.