GitHub連携によるJIRAの自動ステータス遷移

アドマーケティング SSP開発チームのKA.Mです。無事引っ越しできました。
チーム内でGo言語が盛んになっており、同僚と共に日々精進しています。
vim-go と ale というPluginによるGo言語サポートが熱いですね。

OctocatAtlassian


引用元: https://github.com/logos
引用元: https://atlassian.design/guidelines/marketing/resources/logo-files

最近、SSP開発チームでJIRA Softwareを使い始めました。実際に使いSSP開発チーム仕様にカスタマイズを加える事で利便性が向上した事例をご紹介致します。
まずはじめにJIRAの概要として、JIRAはアトラシアン株式会社様のサービスとなります。
チケット管理をカンバン形式で行う事で、直感的にチケット管理が可能となっている所が強みです。
JIRAの良さについてマネージメント面及び技術面の両面から後日テックブログで紹介できたらと考えています。

そのJIRAと前回環境を整備したGitHub環境を連携させ、JIRAのWorkflowステータスを自動で切り替える事が今回の目的です。

2017年7月からGMOアドマーケティングのSSP開発チームにJoinしたKA.Mです。先日、試用期間も無事終え落ち着きました。GMOアドパートナーズグループには、住宅補助手当というオフィスビル近隣に住んでいる人が対象となる福利厚生があるので、そろそろオフィスビル近くに引越かと考えています。早速本題です。Webhookってなに?Webhookとは特定の条件を満たした際に他のアプリケーション/URLへリクエストする仕組みとなります。SSP開発チームでは今回紹介するGitHubの他にSlackのWebhookも活用しています。活用事例SSP開発チームはGitHubの...

JIRAの「smart commit」

JIRAとGitHubの連携といえば「smart commit」です。
リモートブランチを作成、Pull Requestを作成、マージされたタイミングなどで、
JIRAのステータスを切り替える事が可能です。

課題

GitHubのレビュー機能を利用している場合に「smart commit」のステータス管理では実際の開発状況が伝わり辛く、
意思疎通に問題があり、手動でステータスを更新するといった運用が発生していました。

課題を解決する方針

GitHubのレビュー結果をフックし、ラベルを貼り付ける既存の運用を利用し、
ラベルが貼り付けられたイベントをトリガーにJIRAのWorkflowステータスを自動で更新させます。

JIRAのWorkflowステータスは自由に作成できるため、ここではSSP開発チームのステータスを例に挙げさせて頂きます。

オペレーション JiraのWorkflowステータス GitHubのラベル 技術的な話
JIRAにチケット作成 オープン
ローカルブランチ作成 変化なし
リモートブランチへpush 作業中 JIRAのsmart commit連携
PR作成 変化なし ※PR作成時に「レビュー依頼」ラベルを設置した場合、ラベル貼り付けイベントが発火します。
初回レビュー依頼(「レビュー依頼」貼り付け) レビュー中 レビュー依頼 ラベル設置イベントをトリガーにJIRAに反映
レビュー結果:Comment 変化なし 変化なし
レビュー結果:Approve リリース待ち 確認済み GitHubのWebhookによるラベル設置、ラベル設置イベントをトリガーにJIRAに反映
レビュー結果:Request changes 作業中 差し戻し GitHubのWebhookによるラベル設置、ラベル設置イベントをトリガーにJIRAに反映
再レビュー依頼(「レビュー依頼」貼り付け) レビュー中 レビュー依頼 ラベル設置イベントをトリガーにJIRAに反映
マージ 解決済み 変化なし JIRAのsmart commit連携
リリース 変化なし 変化なし
マネージャ最終確認 完了 変化なし

なお、前回の記事から少しWebhookの挙動に変更を加えました。

  • レビュー結果が「Comment」時はラベル操作は行わない
  • レビュー結果が「Request changes」時は「差し戻し」のラベルを張る
  • レビュー結果が「Approve」時は「確認済み」ラベルを張る(運用変わらず)

実オペレーションの確認

上記表を辿って頂けるとわかりますが、GitHub Flowに準拠する事で「解決済み」まで、
自動でステータスが切り替わります。あとはマネージャによる最終確認でチケットが「完了」となります。

では早速設定してみましょう。

実装コード例

GitHubのWebhook設定

PullRequestEventの”action:labeled”をトリガーに実現します。
前回同様に、GitHub側のWebhook設定を行います。
Webhookを適用したいリポジトリのページから Settings > Webhooks と遷移し、 Add webhook から新規にWebhookを追加します。
今回は Let me select individual events. を選択し、 Pull request のみにチェックを入れます。

リクエスト先の設定例

今回は貼り付けられたラベル「レビュー依頼」、「確認済み」、「差し戻し」に応じて適切にJIRAのステータスを更新します。

まとめ

日々便利なサービスがリリースされ開発効率が向上していく中、複数のサービスを使いこなすには体力がいります。
便利なサービスを使っているにも関わらずサービスに振り回され消耗して終わる事もあると思います。
そうならないためにも、サービスを使いこなす、もしくは担当者の負荷がかからないように逃げる術を用意する事で現場のモチベーションが高まります。