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

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

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

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

![ボード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1766904/bd7017cb-f482-1cef-bd54-87b08c2b63b1.png)


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

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

#手順
基本的な手順は下記の記事を参考にしております。
[Github ActionsでJira Cloudと連携してみた](https://qiita.com/Yosuke_Sakaue/items/cb27c12a37d2fd0f6172)
[Github Actions と jira を連携してイケイケな開発ライフを実現する](https://qiita.com/maru401/items/bb668edd4f8f1dfc091c)
ここでは、上記記事を拡張させた内容を記載させて頂きます。

大まかな手順
①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

```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

```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

```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

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