1
0
-1

お世話になります。


「重要度」「緊急度」といったカスタムフィールドがあり、チケット作成または変更時にフィールドの値が「高」となっている場合は、メールまたは Slack へ通知を飛ばしたいです。

可能であれば、一度通知されたチケットは二度以上通知されないというふうにしたいです。

(変更時であれば、フィールドの値がその他から「高」に変更された場合のみ通知、など)


お知恵を拝借できますでしょうか。

宜しくお願い致します。

    Commentコメントを追加...

    2 回答

    1.  
      1
      0
      -1

      皆さま


      お世話になっております。

      今回は、JIRA REST API を用いて Linux サーバ上で定期処理させる方法を取りました。

      定期処理の内容としましては、

      1. REST API で影響度・緊急度が「高」になっているチケット ID 一覧を取得
      2. スクリプトデータファイル中を舐めて、チケット ID が既にあれば何もしない
      3. ない場合、詳細データを取得し Slack へメール投稿
      4. 再度スクリプトデータファイル中を舐めて、REST API でチケットが Close しているかを取得、していればデータファイルから削除

      となります。


      ご参考までに、バッチ処理の一部を記載させて頂きます(Bash にて動作確認しています)。

      ### function: Notify to Slack
      function notify2slack () {
              DataArray=(`curl -s -u "$JIRA_Account" -X POST -H "Content-Type: application/json" --data "{\"jql\":\"id = $1 \"}" "${JIRA_URL}/rest/api/2/search" | jq -r '.issues[] | .fields.issuetype.name, .key, .fields.summary, .fields.customfield_10431.value, .fields.customfield_10430.value, .fields.customfield_10438[], .fields.customfield_10439, .fields.customfield_10504.value, .fields.customfield_10443, .fields.customfield_10421 '`)
              ( echo "知得日時:   ${DataArray[7]}"
              echo "知得起因:   ${DataArray[0]}"
              echo "重要度:     ${DataArray[3]}"
              echo "緊急度:     ${DataArray[4]}"
              echo "影響範囲:   ${DataArray[5]}"
              echo "サービス断: ${DataArray[6]}"
              echo "SlackURL:   ${DataArray[8]}"
              echo "チケットURL: ${JIRA_URL}/browse/${DataArray[1]}") | mail -s "[${DataArray[1]}] ${DataArray[2]}" "$Slack_MailAddress"
      }
      
      ### Notify or Register Hi-Level Ticket ID
      for LINE in `curl -s -u "$JIRA_Account" -X POST -H "Content-Type: application/json" --data "{\"jql\":\"project = Incident AND status in (オープン, 対応依頼中, 対応中) AND (重要度 = 高 OR 緊急度 = 高) ORDER BY cf[10421] ASC\"}"  "${JIRA_URL}/rest/api/2/search" | jq -r '.issues[] | .key'`; do
              if [ `grep -cw "$LINE" "$ScriptDataFile"` -eq 0 ]; then
                      notify2slack "$LINE"
                      echo $LINE >> "$ScriptDataFile"
              fi
      done
      
      ### CleanUp Closed Chicket from Log
      for LINE in `cat "$ScriptDataFile"`; do
              if [ `curl -s -u "$JIRA_Account" -X POST -H "Content-Type: application/json" --data "{\"jql\":\"id = $LINE_ \"}" "${JIRA_URL}/rest/api/2/search" | jq -r '.issues[] | .fields | .status | .name '` == '"クローズ"' ]; then
                      sed -i '/'$LINE'/d' "$ScriptDataFile"
              fi
      done


      樋口様、ご閲覧頂いた皆さま、ありがとうございました。

      今後とも宜しくお願い致します。

      1. 樋口晃

        佐藤様

        ご連絡ありがとうございました。素敵なスクリプトですね!

        連絡が遅れたのですが、JIRA 6.4 ですと EOLとなっておりますので、バージョンアップをご検討下さい。

      2. 佐藤 琢

        樋口様

        バージョンアップは試したのですが、2段階のバージョンアップが必要で、2段階目で Stash(BitBacket)との連携がうまく行かずでそのまま使い続けている次第です…

        こちらのフォーラムで別途ご相談させて頂こうと思います。

        この度はありがとうございました。

      Commentコメントを追加...
    2.  
      1
      0
      -1

      標準の機能だとできるのは、JQL のフィルダーでの指定なので「重要度」「緊急度」が高のチケットを連携する事はできても、「一度通知されたチケットは二度以上通知されない」や「変更時であれば、フィールドの値がその他から「高」に変更された場合のみ通知」が難しいと思います。

      ちなみに、Jiraは JIRA Cloud, JIRA Server のどちらをお使いでしょうか?


      1. 佐藤 琢

        樋口様


        ありがとうございます。

        そして情報を漏らしており失礼致しました、JIRA Server v6.4.2 を使用しております。

        JIRA は開発チケット管理とインシデント記録に使用しております。

        今回の目的としましては、重要度・緊急度の高いインシデントチケットをメールや Slack を介して社内展開するというものです。

      Commentコメントを追加...