目次
JIRA のチケットで動いていることもあって、今日やること = JIRA を見ればわかる状態になっているので 毎日確認できるようにリマインドしたらいいなあと思ってやってみている。
Zapier
Zapier | The easiest way to automate your work
IFTTT みたいなやつ IFTTT を使ったことないので何が違うかはわからない。 何かをトリガーにして、何かをやることができる。 やることを複数のステップにして、条件チェックしたりもできる。 cron のように、定期実行することもできる。 (無課金だとその恩恵が揃っていないみたい)
Zapier を使って JIRA のチケットを通知するくんを作る
トリガー: Schedule > Everyday
毎日実行するだけ。 時間は朝とかお昼くらいがおすすめ。Zapier のプロフィールからタイムゾーンを設定してないと、ずれた時間にくることに注意。
ステップ 1: Webhook > GET
リクエスト先は自分たちの JIRA の APIhttps://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('\
')}];
Zapier と、ここの split の都合によって、JIRA チケット名に「,」が入っているとうまく表示されないので注意が必要。 とって来た値でうまく回させてくれ!