web-dev-qa-db-ja.com

Jenkins SMTP TLS

私の会社のSMTPサーバーを使用してビルド通知を電子メールで送信するようにJenkinsを設定しようとしています。ポート587の暗号化方法としてTLSを使用しています。ただし、電子メール通知が正しく機能しないようです。

これが私のHudson.Tasks.Mailer.xmlファイルですので、私の構成を確認できます(念のため、SMTP認証ユーザーとパスワードを削除し、smtpHostを少し変更しました)。

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

http://issues.hudson-ci.org/browse/HUDSON-2206 の既知の問題のようです

Apple OS(Jenkinsを実行しているマシン))についてはあまり詳しくありませんが、上記の回避策を使用して問題を解決できると思いました。しかし、回避策なので、私はそれをここに入れてみました:/ライブラリ/ 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

それはそれを解決するようには見えませんでした。 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サーバーを使用したほうがいいです。

19
UWSkeletor

enter image description here

SMTPポートを587から465に変更すると、この問題は解決しました。

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

(免責事項:私は決してHudson/Jenkinsの専門家ではありません)Hudson/Jenkins電子メールプラグインはSSL暗号化されたSMTP通信をサポートしていますが、この実装では通信が必要です最初から暗号化されています。

ポート587で接続する場合、反対側のサーバーはSTARTTLSコマンドを予期している可能性があります(この SSL vs TLS vs STARTTLS の記事を参照)。このコマンドは、SSL/TLSを使用するように接続を「アップグレード」するためにプレーンテキストを使用して送信されます。

Hudson/Jenkinsは代わりにポート587でSSLのネゴシエーションを開始しようとしますが、これはすぐに拒否され、次のエラーが発生します。

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電子メールプラグインは、「SSL-ポート465」の「SMTP認証を使用する」オプションをチェックすると、常に送信者の電子メール認証であるSMTP認証が必要になりますまたは「非SSL-ポート587」構成。

22
jiwanrai

私はジェンキンスで同じ問題を抱えていましたが、私はApple OSではなくCentosにインストールされています。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
19
nsof

Windows上のJenkinsの場合

Jenkins.xmlを開き、argumentsノードを変更します

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

Smtp.live.comの場合:

SMTPポートを587に設定し、Use SSL

9
kaloyan

ファイル-Dmail.smtp.starttls.enable=true(debian/ubuntu)の@nsofの回答に記載されているように/etc/default/jenkinsを設定した後でも、私にとっては機能しませんでした。

トリックは、SMTPポートを587およびuncheckに設定することでしたUse SSL以下に示すように、メールは正常に送信されました。

enter image description here

2
iTech

バグ自体に記載されている回避策を試してください。

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

Javaの場合:

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

Tomcatの場合:

追加 Java_OPTS=-Dmail.smtp.starttls.enable="true" to Tomcat設定ファイル。

1
ATOzTOA

Ubuntu 16.04のJenkinsの場合:

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-Jenkinsを再起動します

Sudo service jenkins restart

enter image description here

0
Paul Lockwood

これは、上記の解決策がどれも機能しない場合に最適な解決策です。

https://issues.jenkins-ci.org/browse/JENKINS-47939

0
user11791348

ジェンキンスと2.134以下は私のために働きました:

  • Java_TOOL_OPTIONS=-Dmail.smtp.starttls.enable=true
  • チェックを外すUse SSL
0
schnatterer

Red Hat Enterprise Linux Serverリリース7.4(Maipo)上のJenkinsの場合、/ etc/sysconfig/jenkinsを編集して追加します

enter image description here

Jenkinsサービス構成ファイルには、マシンへのrootアクセスが必要です。 CloudBees Jenkins Enterpriseでは、このファイルは次の場所にあります。

  • / etc/default/jenkins:ほとんどのLinuxディストリビューションの場所。
  • / etc/sysconfig/jenkins:RedHat/CentOSディストリビューションの場所。
  • C:\ Program Files\Jenkins\jenkins.xml:Windowsのデフォルトの場所
0
Alferd Nobel

-Dmail.smtp.starttls.enable = trueをJava_OPTSの引数として追加すると問題が解決しました

Jenkinsがスタンドアロンモードで実行されている場合は、/ etc/sysconfig/jenkinsのJava_OPTSを更新します。jenkinsがTomcatで実行されている場合は、Java_OPTSを更新します。

  • uNIXの場合はcatalina.sh
  • windows用のcatalina.bat
0
Abid