JenkinsとSlackの連携方法（2019年12月現在）


## 概要

[jenkinsci/slack-plugin](https://github.com/jenkinsci/slack-plugin)にアップデートがあり、タイトルの内容でググると良く出てくる参考になりそうな記事では以下のように設定内容が異なります。

とても紛らわしく、本家に以下のIssueを作り、フィードバッグをもらってようやく理解できて連携できまして笑
[Response: null, Response Code: 404 and Response: {"ok":false,"error":"invalid_auth"} #649](https://github.com/jenkinsci/slack-plugin/issues/649)

なので今回、JenkinsとSlackの最新の連携方法をまとめていきます。

### 古いバージョン

![https___qiita-image-store.s3.amazonaws.com_0_215847_ebc4bba1-d28f-652e-4f2d-3fe4b9b863b1.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/9d66fc4f-2300-8ee3-d27a-d38493407fe5.jpeg)
※詳細：[JenkinsとSlack連携](https://qiita.com/haruto830/items/7a9798a57d9b2471a15c)

![https___qiita-image-store.s3.amazonaws.com_0_10605_5e260d5f-4787-a994-fa28-82a6b4ce1b26.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/28fc0412-bb05-b997-4f28-5103376e94e4.jpeg)
※詳細：[Jenkinsおじさんビルド結果Slackに通知して](https://qiita.com/ryuthky_github/items/c7e68fba13ddf230159a)

### 現在

<img width="1316" alt="スクリーンショット 2019-12-18 15.05.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/f7a0eb27-6d2d-532e-065d-4efa3ed39404.png">
※詳細：[jenkinsci/slack-plugin](https://github.com/jenkinsci/slack-plugin)

## 環境

- OS
  - macOS 10.15.1
- Jenkins 
  - 2.190.2
- slack-plugin
  - 2.35
- Maven 
  - 3.6.3
- Java
  - 11.0.2

### 前提知識

連携方法の大枠を知っておかないと初見ですぐ理解するのは難しいかもしれません。
過去の記事や[jenkinsci/slack-plugin](https://github.com/jenkinsci/slack-plugin)を確認しておくことをオススメします。

### what "legacy"?

いろいろ調べているとレガシーと読んでいる解説がちょくちょく見られます。
これは上記の古いバージョンの`jenkinsci/slack-plugin`を指しており、現在は`Jenkins CI`だけでは連携できないようになっております。

## Jenkins CI

Jenkinsのジョブの結果を通知させたいSlackにこれまで[Jenkins CI](https://slack.com/services/new/jenkins-ci)を導入し、トークンが発行され、以前まではこれをもとにJenkinsとSlackを連携できていました。

ですが**現在のバージョンでは使用せず、`Custom Slack App`を作成してJenkins専用のBotを各自で作成する必要がある**ようです。

<img width="821" alt="スクリーンショット 2019-12-19 17.36.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/f3afbd38-a768-2779-b7f1-0fde8f63ea11.png">
<img width="814" alt="スクリーンショット 2019-12-19 17.36.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/08545469-8fb8-d320-8d70-a634bfe4f517.png">
<img width="807" alt="スクリーンショット 2019-12-19 17.36.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/f043d754-0a82-ef8a-b066-ddca1aa0855a.png">
<img width="808" alt="スクリーンショット 2019-12-19 17.37.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/4b62c52d-8974-24fe-c025-43c07a381678.png">


※Jenkinsの設定画面をよく見ると上記の古いバージョンと同じでそもそも参考にならない笑汗

## Custom Slack App

[api.slack.com](https://api.slack.com/)にアクセスし、「Start Building」をクリックしてボットを作っていきます。

「Create a Slack App」にBotアカウントの名前とWorkspaceの指定を決めていきます。

<img width="473" alt="スクリーンショット 2019-12-19 17.43.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/015d8e37-88e3-8728-a60f-1f3aae4f3fa2.png">

次にBotsとPermissions、Botのアイコンなどを決めていきます。
ちなみにこの画面で表示されている「App Credentials」の情報でIDやTokenなどの情報がありますが、今回は一切使いません。

<img width="600" alt="スクリーンショット 2019-12-19 17.44.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/1edef515-7987-477f-9020-e2d8f1dc20cb.png">

<img width="600" alt="スクリーンショット 2019-12-19 17.45.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/b17a143d-56f9-ad8b-f4c6-78b1759b722e.png">

### Registration

ここからは[jenkinsci/slack-plugin](https://github.com/jenkinsci/slack-plugin)のREADMEにも書かれている内容になります。

#### Botアカウント作成

`Bot User`にアクセスし、正式にBotアカウントを作成しました。

<img width="775" alt="スクリーンショット 2019-12-19 15.32.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/328643ff-3448-fa8c-821b-e63898be2a27.png">

#### 認証や承認など

次に`OAuth & Permissions`にアクセスし、`OAuth Tokens & Redirect URLs`と`Scopes`に設定を行なっていきます。

「Install App」をクリックし、BotとWorkspaceの紐付けを承認します。
このときのアイコンは、Display Informationページ上で設定したアイコンになります。

<img width="510" alt="スクリーンショット 2019-12-19 15.17.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/a1763593-ccc8-c9b6-1336-7c7578c1a8d7.png">

`Bot User OAuth Access Token`の内容をコピーし、このトークンが`Jenkins CI`のトークンの代わりになります。
コピーしたトークンをJenkins -> システム設定 -> Slack配下にある`Credential`の追加から`Secret text`で`Secret`にペーストして認証情報を発行し、そのまま`Credential`に設定しておきます（このへんの設定は以前と同じ）。

<img width="782" alt="スクリーンショット 2019-12-19 15.17.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/11d199a7-9dc5-4ca4-d3dd-3f666e17bd7d.png">

`Scopes`には公式で解説されている次の設定を行います。

<img width="572" alt="スクリーンショット 2019-12-19 15.18.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/53a152a6-d565-b7b4-7d30-97156c6651a9.png">

次に通知したいチャンネルにBotアカウントを追加します。
（もしJenkins CIを追加してたら以下スクショのように紛らわしい状況になります笑）

<img width="615" alt="スクリーンショット 2019-12-19 15.21.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/a7ac66f1-9943-7e54-2111-652f9669744c.png">

これでJenkins -> システム設定 -> Slack配下にある`Test Connection`をクリックすると次のように成功すると思います。

<img width="456" alt="スクリーンショット 2019-12-19 15.37.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/b0332d62-bb55-6acd-a2af-b6c59d140365.png">

<img width="360" alt="スクリーンショット 2019-12-19 15.32.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/aeb37da6-d517-75df-e27e-a8f468fd954a.png">

もしBotアカウントの追加が忘れていると次のようにエラーになります。

<img width="560" alt="スクリーンショット 2019-12-19 15.19.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/3b2266a2-a225-df0c-1a81-d71c679489bb.png">


## ビルド後の処理 -> Slack Notifications

これで完了になります、お疲れ様でした。

<img width="1220" alt="スクリーンショット 2019-12-19 18.17.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/dd7a12bd-da96-ac4a-d6e6-f8e389c58a07.png">

<img width="357" alt="スクリーンショット 2019-12-19 15.57.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82601/3218e90a-df17-390d-e145-d2f60aabad7e.png">