Zapier を使って JIRA のチケットを通知する

JIRA のチケットで動いていることもあって、今日やること = JIRA を見ればわかる状態になっているので
毎日確認できるようにリマインドしたらいいなあと思ってやってみている。

Zapier

Zapier | The easiest way to automate your work

IFTTT みたいなやつ IFTTT を使ったことないので何が違うかはわからない。
何かをトリガーにして、何かをやることができる。
やることを複数のステップにして、条件チェックしたりもできる。
cron のように、定期実行することもできる。
(無課金だとその恩恵が揃っていないみたい)

Zapier を使って JIRA のチケットを通知するくんを作る

トリガー: Schedule > Everyday

毎日実行するだけ。
時間は朝とかお昼くらいがおすすめ。

Zapier のプロフィールからタイムゾーンを設定してないと、ずれた時間にくることに注意。

ステップ 1: Webhook > GET

リクエスト先は自分たちの JIRA の API

https://XXXXX.atlassian.net/rest/api/v2/search

パラメータとしてこんなものを設定する。

// パラメータ名
jql

// パラメータ値
updated >= -4w AND (assignee = currentUser() OR reporter = currentUser() OR comment ~ currentUser() OR text ~ currentUser() OR watcher = currentUser() OR voter = currentUser() OR creator = currentUser()) ORDER BY updated DESC, status DESC, lastViewed DESC
// Basic Auth
{{ログインメールアドレス}}|{{トークン}}

JQL と言われる JIRA 上でチケットを探すためのクエリを使い、あらゆる箇所に自分が含まれているかを探すような記載をしている。加えて、最終更新が 4 週間以内のものに絞っているので、古いものは出てこない。

詳しい開設はコッチ。
高度な検索 - アトラシアン製品ドキュメント

Basic Auth は JIRA からアクセストークンを発行して、メールアドレス|アクセストークンの形で記載する。
ここからできる。
https://id.atlassian.com/profile/profile.action

ステップ 2: Code > Run by Javascript

JSON で返ってきたデータをそのままだと Slack にまとめてウマいこと送ることが出来ないので、スクリプトで頑張る。

// Input Data
// 以下の変数に同様の名前のJIRAからのレスポンスをマッピングする
issue_summary
issue_status_name
issue_key
let text = [];
const issue_summary = inputData.issue_summary.split(',');
const issue_status_name = inputData.issue_status_name.split(',');
const issue_key = inputData.issue_key.split(',');

for (let i = 0, m = issue_summary.length; i < m; i++) {
  text.push(`[${issue_status_name[i]}] ${issue_summary[i]} https://XXXXX.atlassian.net/browse/${issue_key[i]}`);
}

output = [{text: text.join('\n')}];

Zapier と、ここの split の都合によって、JIRA チケット名に「,」が入っているとうまく表示されないので注意が必要。
とって来た値でうまく回させてくれ!

ステップ 3: Slack > Send channel message

あとは整形されたチケット一覧を Slack に送るだけ。

出力結果

最終的にこのように表示される。

全面モザイクで申し訳なさあるけど見せられないんや…スマン…

前後の記事

Next:
Prev: