JiraとGithubを連携。Jiraのチケットを自動で動かしてみる。


はじめに

アジャイル開発で利用することも多い「Jira」。
https://www.atlassian.com/ja/software/jira

Jiraでは、「ボード」でチケット(issue)のステータスを管理すると思います。
(プルリクを立てたら、ステータスを「REVIEW」にするみたいな。)

私が参加したプロジェクトにおいて、このチケットを手動で移動させておりました。
当然、自動化させた方が良いということで取り組んだものの、中々情報も少なかったので、今回記事にします。

実現したこと

Githubのプッシュ、プルリク、マージされたタイミングで、Jiraのチケットのステータスが自動で移動させました。

別解

このような連携は、Github Actionsを使用せず、「トリガー」を使う方法もあります。
https://ja.confluence.atlassian.com/adminjiracloud/configuring-workflow-triggers-776636696.html
しかし、「チーム管理対象プロジェクト」では上記の方法は使用できません。「企業管理対象プロジェクト」にのみ適用できます。
私が参加したプロジェクトは、「チーム管理対象プロジェクト」だったため、Github Actionsで実現させました。

手順

基本的な手順は下記の記事を参考にしております。
Github ActionsでJira Cloudと連携してみた
Github Actions と jira を連携してイケイケな開発ライフを実現する
ここでは、上記記事を拡張させた内容を記載させて頂きます。

大まかな手順
①github for jiraの導入
②環境変数の設定
③github actionsの設定

その他参考サイト

下記Gituhubのリポジトリも参考にしています。
https://github.com/marketplace/actions/jira-issue-transition
https://github.com/atlassian/gajira-find-issue-key

実装

コミットメッセージにJiraの課題キー(例:KD-1)を含める点に注意して下さい。
下記ファイルをworkFlows配下に設置します。
プロジェクトに応じて、適宜修正して下さい。
to_progress.yml

# プッシュされた時、ステータスを「進行中」に移動
on:
  push:
    branches:
    - '*'
    - '!develop'

name: Transition Issue

jobs:
  test-transition-issue:
    name: Transition Issue
    runs-on: ubuntu-latest
    steps:
    - name: Login
      uses: atlassian/gajira-login@master
      env:
        JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
        JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
        JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}

    # プッシュされたコミットメッセージに記載された課題キーを抽出する    
    - name: Find in commit messages
      id: find
      uses: atlassian/gajira-find-issue-key@master
      with:
        string: ${{ github.event.ref }}

    # 課題キーが特定できればJiraに対してトランジションを発行
    - name: Transition issue
      uses: atlassian/gajira-transition@master
      # 課題キーが含まれていなければスルー
      if: ${{ steps.find.outputs.issue }}
      with:
        # 前のステップのアウトプットを参照
        issue: ${{ steps.find.outputs.issue }}
        transition: "In progress" 

to_review.yml

# プルリク時に、「REVIEW」に移動
on:
  pull_request:
    branches:
      - develop

name: Transition Issue

jobs:
  test-transition-issue:
    name: Transition Issue
    runs-on: ubuntu-latest
    steps:
    - name: Login
      uses: atlassian/gajira-login@master
      env:
        JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
        JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
        JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}

    # プッシュされたコミットメッセージに記載された課題キーを抽出する
    - name: Find in commit messages
      id: find
      uses: atlassian/gajira-find-issue-key@master
      with:
        string: ${{ github.event.pull_request.title }} 

    # 課題キーが特定できればJiraに対してトランジションを発行 
    - name: Transition issue
      uses: atlassian/gajira-transition@master
      # 課題キーが含まれていなければスルー
      if: ${{ steps.find.outputs.issue }}
      with:
        # 前のステップのアウトプットを参照
        issue: ${{ steps.find.outputs.issue }}
        transition: "REVIEW"

to_deployed.yml

# developブランチにマージされた時、「deployed」に移動
on:
  pull_request:
    branches:
      - develop
    types: [closed]

name: Transition Issue

jobs:
  test-transition-issue:
    name: Transition Issue
    runs-on: ubuntu-latest
    if: github.event.pull_request.merged == true
    steps:
    - name: Login
      uses: atlassian/gajira-login@master
      env:
        JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
        JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
        JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}

    # プッシュされたコミットメッセージに記載された課題キーを抽出する    
    - name: Find in commit messages
      id: find
      uses: atlassian/gajira-find-issue-key@master
      with:
        string: ${{ github.event.pull_request.title }} 

    # 課題キーが特定できればJiraに対してトランジションを発行     
    - name: Transition issue
      uses: atlassian/gajira-transition@master
      # 課題キーが含まれていなければスルー
      if: ${{ steps.find.outputs.issue }}
      with:
        # 前のステップのアウトプットを参照
        issue: ${{ steps.find.outputs.issue }}
        transition: "DEPLOYED" 

リポジトリ

Githubのリポジトリも公開しております。
https://github.com/kondo97/jira_github

おわり

不備、不明点があれば、お手数ですがコメントにてお伝え下さい。