Kubernetes上に構築したjiraとmattermostを連携させて通知出来るようにする

# 目的
Jiraで課題等を作った時にmattermostへ通知が飛ぶようにする。

# 構成
![20191217_jira-to-mattermost-kouseizu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/dab265f0-eca6-b14e-8b9c-22fab578d65c.png)

# 利用したtool
[jira-to-slack](https://github.com/int128/jira-to-slack)というtoolを使いました。
[int128](https://github.com/int128)さんが作ってくださっている。ありがとうございます。

# メモ
K8s上にdeployしたJIRAとmattermost標準のJiraとmattermostのintegration機能を使うと、うまく行かず(原因： https化してないから？深く切り分けられていない)、上記の[jira-to-slack](https://github.com/int128/jira-to-slack)を使わせて頂いた。

# 構築手順
大枠は、[jira-to-slack](https://github.com/int128/jira-to-slack)の[README.md](https://github.com/int128/jira-to-slack/blob/master/README.md)の通り。
構築手順の変更ポイントとしては、jira-to-slackもkubernetesに乗せるようにした。
今回作ったjira-to-slack用のmanifestをgithubに上げておきました。参考になれば幸いです。
https://github.com/iguchikoma/jira-to-slack-kubernetes

## 1. Mattermost上にincoming webhookを作る。
Ref. https://docs.mattermost.com/developer/webhooks-incoming.html

### 1-1. mattermost上にchannelを作る。
通知を受ける用のchannelとしてjiraという名前でchannelを作った。
<img width="206" alt="スクリーンショット 2019-11-11 18.47.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/0fab1fe2-9fef-e5fc-5c2f-93c8c3e5cbed.png">

### 1-2. incoming webhookを設定する
mattermostの左上メニューからintegrations > incoming webhookと進んで、以下のようにwebhookを設定してsaveする
<img width="1116" alt="スクリーンショット 2019-11-11 18.48.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/b824f5ca-bcbd-14bb-127f-b4d3c288dc24.png">

するとwebhookが生成される
<img width="1092" alt="スクリーンショット 2019-11-11 21.43.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/883ec3eb-28e4-9b3d-39c5-850e21fb035f.png">

## 2. JIRAにwebhookを設定する。
右上の歯車 > システム > 左サイドバーのWebフック > Webフックの作成と進み、以下のようにWebhookを作成する。URLは[jira-to-slackのURL]?webhook=[mattermostのwebhookのurl]&dialect=mattermost&channel=jira&debug=1
<img width="1070" alt="スクリーンショット 2019-11-11 21.44.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/1ebf5198-5e08-c95d-bbe5-7562ea2cbeba.png">

## 3. jira-to-slackをkubernetesにdeployする
ServiceはNodePortで30003としています。適宜、自分の環境に合わせて書き換えてください。

```bash:bash
### jira-to-slackのkubernetes manifest一式をgithubから取ってくる。
vagrant@vagrant:~$ git clone https://github.com/iguchikoma/jira-to-slack-kubernetes.git
vagrant@vagrant:~$ cd jira-to-slack-kubernetes/

### deployする。
vagrant@vagrant:~/jira-to-slack-kubernetes$ kubectl apply -f jira-to-slack-ns.yaml
vagrant@vagrant:~/jira-to-slack-kubernetes$ kubectl apply -f jira-to-slack-deployment.yml
vagrant@vagrant:~/jira-to-slack-kubernetes$ kubectl apply -f jira-to-slack-svc.yaml

### jira-to-slackの動作確認 (NodePortは30003)
vagrant@vagrant:~/jira-to-slack-kubernetes$ kubectl get svc -n jira-to-slack jira-to-slack
NAME            TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
jira-to-slack   NodePort   10.100.82.84   <none>        3000:30003/TCP   75s

### curlでAPIの応答確認
vagrant@vagrant:~/jira-to-slack-kubernetes$ curl http://192.168.33.10:30003
missing query parameter. Request with ?webhook=https://hooks.slack.com/xxx
```

# 4. 動作確認
JIRAで適当に課題を作ってみて、mattermostに通知が飛ぶか確認する。mattermostへの通知はこんな感じで飛ぶ。
![res001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76498/853af03c-5c11-6ad9-3214-52ee223338d2.png)

# 最後に
以上で作業終了です。参考になれば幸いです。