これはなに
Jiraのエピックのステータス変更をトリガーとして、エピックのカスタムフィールドに登録されているメンバー宛にSlackでメンション通知を自動化で送る方法について書いている備忘録です。
使うもの
- Jira
- Slack(Pro版)
JiraはJira Softwareを対象として書いています。
Jira Work Managementでも同じように機能するかは未検証です。
Slack Pro版は、メンション通知したいメンバーが自動化フローごとに固定で決まっている場合は不要で、カスタムフィールドに登録されているメンバー宛にメンション通知をしたい場合は、ワークフロービルダーを使うためPro版が必要になると思われます。
もし他の方法があったら教えてください。
自動化の設定
今回は下記のようなケースを想定して設定を行います。
カスタムフィールドの作成
まずカスタムフィールドを設定します。
プロフィールアイコン左にある設定(歯車アイコン)から課題
を選び、サイドメニューのカスタムフィールド
にアクセスします。
チームの管理者権限があるユーザーしかアクセスできないと思われるので注意です
画面右上にあるカスタムフィールドを作成
のボタンをクリック
するとフィールドタイプの選択がポップアップ表示されます。
ここでユーザーピッカー(単一ユーザー)
を選んでください。
後述しますが、Slackのワークフローではユーザーピッカー(複数ユーザー)
で選んだユーザーの情報を受け取ることができなさそうだった為、単一ユーザーを選んでいます。
カスタムフィールドの名前と説明を入れて作成します。
作成後に「フィールドを画面に関連づける」という画面表示が挟まりますが、これが何を指すのかわかっていません...
アクションとしては更新とキャンセルが選べますが、一旦キャンセルを選んで問題ないと思います。
SlackワークフローでWebhookを作成
サイドメニューの自動化
→ワークフロー
と進んで右上のワークフローを作成する
ボタンをクリック。
新規タブでワークフローの設定画面が開くので、一番下のWebhookから
を選択。
変数を設定する
を選んで下記の3つを設定します。名前は任意です。
-
mentionUserEmail
- データタイプ...
Slackユーザーのメールアドレス
- データタイプ...
-
jiraUrl
- データタイプ...
テキスト
- データタイプ...
-
message
- データタイプ...
テキスト
- データタイプ...
続行する
ボタンを押すとワークフローが設定されてWebリクエストのURLが発行されるので、リンクをコピーしておきます。
このようになっていればOKです。
自動化(Automation)の設定
Jiraに戻ります。
通知を設定したいプロジェクトに移動し、サイドバーのプロジェクト設定
→自動化
のメニューを選んで右上のルールを作成
ボタンをクリックします。
ルールビルダーが立ち上がるので、ここで設定を行っていきます。
今回はテスト完了
へのステータス変更時をトリガーとするので、課題のトランジション時
を選択し、ターゲットステータスにテスト完了
を選びます。
コンポーネントを追加
を選んで他の条件も設定していきます。
ここは任意ですが、一応課題フィールドの条件
で課題タイプ
がエピック
と一致する条件をIF条件で追加しておきます。
(後からエピックだけではなくストーリーにもテスト完了
のステータスを追加したいということがあるかもしれないので)
続いて課題フィールドの条件で、先ほど作成したカスタムフィールドauthorizer
が「空ではない」という条件を設定します。
アクションでWebリクエストを送信
を追加し、メソッドでPOSTを選んで下記のようにカスタムデータを設定します。
{
"mentionUserEmail": "{{issue.customfield_XXXXX.emailAddress}}",
"jiraUrl": "{{issue.url}}",
"message": "リリース承認依頼がありました。"
}
mentionUserEmail
,jiraUrl
, message
については先ほどSlackワークフローで設定した変数名を入れてください。
customfield_XXXXX
の部分に関しては、冒頭で追加したカスタムフィールドauthorizer
のIDが入ります。
このIDは、プロジェクトの設定
→課題タイプ
にアクセスして、デベロッパーモードで対象のフィールド要素をフォーカスすると確認することができます。
上の例だと、10037
がauthorizer
のIDになります。
message
の内容はお好みでカスタマイズしてください。
{{issue.url}}
などはJQLというJira独自のクエリ言語で使われる「スマートバリュー」というもので、課題検索やフィルターで演算子を使って高度な課題検索ができるようになっています。
詳細は下記リンクを参照してください。
最後にルールの名前を登録し、ルールをオンにして設定完了です。
しかし、このルールのみだと、authorizer
が設定されていない状態でエピックをテスト完了
ステータスにトランジションしてしまった時にAutomationが動かないため、もう一つルールを追加しておきます。
自動化ルールの一覧に戻り、先ほど作成したルールのアクションで「コピー」を選びます。
コピーが完了したら適当にルールの名前を変え、トリガーを課題のトランジション時
からフィールド値の変更時
に変えます。
変化を監視するためのフィールド
にauthorizer
をセットし、変更タイプ
を追加された値
にしておきます。
続いて、IF条件で課題フィールドの条件
を追加し、対象フィールドをステータス
、条件を「テスト完了
と等しい」に設定します。
その他はコピー元と条件を変える必要はありません。
これで、ステータスがテスト完了
にトランジションした後でauthorizer
フィールドに承認者を追加した場合もAutomationが動くようになります。
Slackワークフローで変数を含めたメッセージを作成する
先ほど作成していたSlackワークフローに戻ります。
ステップにメッセージ
を選んで追加します。
今回は特定のチャンネルに通知する想定なので、チャンネルへメッセージを送信する
を選びます。
通知したいチャンネルを選んだのち、変数を挿入する
から上記のように変数をメッセージに追加します。
この時、mentionUserEmail
のプルダウンで @表示名
が選択されていることを確認しておきます。デフォルトでこの設定になっているはずです。
mentionUserEmail
に入ってくるデータがユーザーピッカー(複数ユーザー)
だとうまく動かなかったため、冒頭のカスタムフィールド作成ではユーザーピッカー(単一ユーザー)
を選んで作成して対応しています。
この方法で複数名メンションしたい場合は、単一ユーザーのカスタムフィールドを複数作成し、Slack側の変数も人数分用意するしかなさそうです...
全て設定が完了したら、ワークフローの名前、説明、画像などを任意で設定して準備完了です!
動作確認
ワークフローが正常に動くか確認しましょう。
Jiraのエピックにauthorizer
が設定されている状態で、ステータスを開発完了
からテスト完了
にトランジションします。
うまく設定できていれば、このようにワークフローが動いて通知が届くはずです。
同様に、authorizer
が設定されていない状態でステータスをテスト完了
にして、後からauthorizer
に承認者を設定した場合も通知が来るかどうかをチェックしてください。
おまけ: ワークフローを使わずにSlack Integrationを使って通知する方法
承認者が1人であったり、Slackで承認者のユーザーグループが設定されていたりと、メンション先が固定の場合は、Slackワークフローを使わずにSlack Integrationを設定して通知することもできます。
チャンネル情報を開いて、インテグレーション
タブからAppのアプリを追加する
を選択します。
アプリ追加画面で検索してIncoming Webhookをインストールします。
通知をしたいチャンネルを選んで、インテグレーションの追加ボタンをクリックし、次のページで表示されるWebhook URLをコピーします。
JiraのAutomationではアクションにSlackメッセージを送信
を設定します。
上記の例ではSlack側にauthorizer
というユーザーグループが設定されている前提で、そのグループ宛にメンションをする設定になっています。
このように通知されます。
こちらの方法はワークフロービルダーを使わないので、Pro版でなくても設定できます。
参考: JQLスマートバリューの一覧
上記ドキュメントにEpic関連の通知でよく使いそうなスマートバリューの値とプロパティが記載されています。
メッセージで通知したい内容に応じて参照してカスタマイズしてみてください。