六 月
10
土曜日

Jenkins2からSlackへ通知する

Jenkins2からSlackへ通知する場合の覚え書き。


Slack側の設定

https://my.slack.com/apps から Jenkins で検索。 Jenkins CI を選択し、Install

Post to Channel
Jenkinsからの通知するデフォルトチャネル。
Jenkins側でチャネルを明示しなかった場合に利用される。

Add Jenkins CI Integration を押下して登録完了。

登録が完了すると Jenkins CI Integration のコンフィグレーションページが表示されるのでページ中の Token の値をメモしておく。 後述のJenkins側の設定で利用する。

Jenkins側の設定

Slack通知用認証情報の作成

認証情報 -> System -> グローバルドメイン -> 認証情報の追加

種類
Secret text
スコープ
グローバル
Secret
Slack側Jenkins CI IntegrationのTokenを指定
ID
slack
説明
Slack通知用トークン

Slack Notification Pluginのインストール

Jenkinsにログインし、Jenkinsの管理 -> プラグインの管理 -> 利用可能 タブから Slack Notification Plugin をインストール。

Slack Notification Pluginの設定

Jenkinsの管理 -> システム設定 -> Global Slack Notifier Settings から以下を設定。

Base URL
指定なし
Team Subdomain
Slackのチーム名
Integration Token
指定なし
Integration Token Credential ID
Slack通知用トークン
Is Bot User?
オフ
Channel
通知するSlackチャネル名。
JenkinsからSlackへ通知する際のチャネル名。

以上で Test connection を押下して実際に通知できるかテストをする。

成功すると指定チャネルに Jenkin CIからSlack/Jenkins plugin: you're all set on ... というメッセージが送信される。

JenkinsジョブからSlackへ通知する

Jenkinsジョブの設定 -> General タブ -> ビルド後の処理追加 -> Slack Notifications から

  • Notify Build Start
  • Notify Aborted
  • Notify Failure
  • Notify Not Built
  • Notify Success
  • Notify Unstable
  • Notify Regression
  • Notify Back To Normal

Slackへ通知するトリガを選択する。

また 高度な設定… からジョブ毎に通知先チャネルやメッセージをカスタマイズできる。

Jenkins piplelineからSlackへ通知する

piplelineからはslackSendステップを利用してSlackへ通知する。

  • 単純な通知
slackSend "hello!
  • チャネルを指定して通知
slackSend channel:"#random", message: "hello random!"
  • 色を指定して通知
slackSend color:"#ff0000", message: "hello red!"

ちなみにSlackへの通知に失敗した場合でもパイプライン自体は成功となる。

通知失敗時にパイプラインを失敗させたい場合はfailOnErrorオプションを真に設定する。

slackSend failOnError:true, message: "hello!"

ステップの詳細は Slack Notification Plugin を参照。

チャネルの指定と優先順位

通知するチャネルの指定は、

  • Slack側Jenkins CI Integration設定
  • Jenkins側システム設定
  • Jenkins側ジョブ設定

の三カ所で行うことが出来る。優先順位は

Jenkins側ジョブ設定 -> Jenkins側システム設定 -> Slack側Jenkins CI Integration設定

の順となっている。