はじめに
Jenkinsには、ジョブ完了時などにメールを送信する機能があります。ただJenkinsがデフォルトで備えるメール送信機能はメールを送信する契機(トリガ)に「常時(Always)」を指定できません。
プログラムのビルドジョブであればビルド失敗時のみの通知で事足りるかもしれませんが、ある程度時間のかかるジョブの場合「ジョブが完了した」という通知を必要とする場合があります。
これをJenkinsだけで実現すべく「拡張E-mail通知プラグイン(Email Extension Plugin)」を使用することにしたのですが、メールサーバ関連の設定ではまりました。私の探しかたが悪いのか解決策が見つからず、結局試行錯誤して解決しましたので備忘録も兼ねてここに記します。
コンテナ化して使うならこんな手間不要なんですかね……
まとめ
- 拡張E-mail通知プラグイン(v2.100)を使う場合、SMTP認証情報はCredentialsとして設定する
- 標準のE-mail通知の設定は流用されない
- テスト中はデバッグモードの使用を推奨
環境
Jenkins側の環境は以下の通りです。Windows上で動かしています。
表1:環境
項目 | バージョン |
---|---|
Jenkins | 2.401.3 LTS |
Email Extension Plugin | 2.100 |
Credentials Plugin | 1271.v54b_1c2c6388a_ |
図1:Email Extension Plugin(拡張E-mail通知)
やりたいことと課題
諸事情があり、今回はGmailのSMTPサーバを使用してメールを送る構成にしました。
実現したいこと(実現したこと)を簡単に図示したのが図2です。
Jenkinsが標準で備えるEmail通知を使う場合、図3の設定だけで済みます。
図3:Jenkins標準のEmail通知機能を使う場合の設定
"Use SMTP Authentication"にチェックを入れて、ユーザ名とパスワードを設定するだけです。1点注意が必要で、使用するGoogleアカウントの2段階認証を有効にしている場合はパスワード欄に「アプリパスワード」を設定する必要があります。Jenkins用にアプリパスワードを1つ作れば良いと思います。
正直、拡張E-mail通知プラグインは単に様々なトリガが設定可能になるだけで、SMTPサーバの設定はこの標準のE-mail通知のサーバ設定を参照するものだとばかり思い込んでいたのが浅はかでした……
結論から言うと、拡張E-mail通知プラグインを使用して上記を実現するには "Credentials Plugin"という別プラグインが提供する機能で認証情報を作成してその認証情報を設定する 必要がありました。
具体的な設定方法
拡張E-mail通知の設定のうち、サーバに関する部分は図4の通りです。"Credentials"の部分にSMTP認証に使用する認証情報をプルダウンメニューから選択します。そのため認証情報を追加する必要があります。
追加するには、まず図4の赤丸で示したボタンを押します。
すると図5のダイアログが表示されます。
種類を「ユーザー名とパスワード」にした状態で、「ユーザー名」にアカウント名(例:foobar@gmail.com
)、「パスワード」にパスワード(2段階認証を有効にしている場合はアプリパスワード)を設定して「追加」します。
すると図4に戻りますので、「追加」ボタンのすぐ上にあるプルダウンボックスからつい先ほど追加した認証情報を選択すればOKです。
メールが正しく送信されるかどうかをテストする際は、デバッグ機能を有効にすることをお勧めします(図6)。
図6:拡張E-mail通知のデバッグモード切り替えチェックボックス
このデバッグモードを有効にすると、拡張E-mail通知を使用したジョブのコンソールに、この拡張E-mail通知機能によるメール送信に関するデバッグ情報が出力されます。このデバッグ情報は問題の切り分けに非常に役立ちます。
あとは、拡張E-mail通知を使いたいジョブに処理を組み込んで、トリガーや送信先を適切に設定すれば完了です。この方法についてはいくつかのWebページに説明がありますのでそちらをご覧いただければと思います。
さいごに
今回は、Jenkinsの「拡張E-mail通知プラグイン(Email Extension Plugin)」を使用して外部のSMTPサーバを使う場合のSMTP認証情報の設定方法をまとめました。
Jenkinsを同様の構成で使用される場合のご参考になれば幸いです。
ライセンス表記
この記事はクリエイティブ・コモンズ 表示 - 継承 4.0 国際 ライセンスの下に提供されています。