Github ActionsでJira Cloudと連携してみた

この記事は [セゾン情報システムズ Advent Calendar 2020](https://qiita.com/advent-calendar/2020/sisco) 11日目の記事です。

最近Actions熱が高まっており、いろいろと触って遊んでみました。
手始めに、ニーズがあるかというと微妙な感じですが、ActionsとJiraを連携させてみました。

## 利用したActions  
[Marketplace](https://github.com/marketplace?type=actions&query=Jira)に公開されていたAtlassian公式のActionsを利用させていただきました。

- [Jira Login](https://github.com/marketplace/actions/jira-login)
- [Jira Create issue](https://github.com/marketplace/actions/jira-create-issue)
- [Jira Find issue key](https://github.com/marketplace/actions/jira-find-issue-key)
- [Jira Issue Transition](https://github.com/marketplace/actions/jira-issue-transition)

## 事前準備
- [Github.com](https://github.com/)に任意のリポジトリを作成する
- Jira Cloudに任意のプロジェクトを作成する  
※両方Freeプランで利用可能です

## 環境変数(Secret)を設定
Actionsから利用するSecretをリポジトリの「Settings」→「Secrets」に追加する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/c10f9366-54a7-8ef6-286c-a3d145031607.png)

- JIRA_API_TOKEN
    - [取得方法](https://confluence.atlassian.com/cloud/api-tokens-938839638.html)
- JIRA_BASE_URL
    - JiraインスタンスのURL。 例：https://{yourdomain}.atlassian.net
- JIRA_USER_EMAIL
    - アクセストークンを作成したユーザーのメールアドレス

## Githubにissuesが作成されたらJiraのタスクを起票する
「Actions」タブの「New workflow」から新規ワークフローを作成

```yaml:create-issues.yml

name: Jira Example

on:
  issues:
  push:
    types: [opened]

jobs:
  build:
    runs-on: ubuntu-latest
    name: Jira Example
    if: github.event.action == 'opened'
    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: Jira Create issue
      uses: atlassian/gajira-create@v2.0.1
      with:
        # プロジェクトキーを指定
        project: AC
        # 課題タイプを指定
        issuetype: Task
        # issuesのタイトルが要約になるように設定
        summary: ${{ github.event.issue.title}}
        # issuesの本文が説明になるように設定
        description: ${{ github.event.issue.body}}
```

issuesを作成してみると。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/df5ac099-8b80-fe30-eb4d-639dc9adc020.png)

ワークフローが動き出し。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/0237428f-e3f4-3111-9e04-898ce4ff444c.png)

Jiraにタスクが作成されました！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/c7bfc4c5-6b34-0ca1-1a00-8a0c7d1aa4cb.png)

## 変更がプッシュされたら課題を「進行中」に遷移させる
今作ったisssuesに対応したソースコードをプッシュした際にJira側のタスクもステータスを遷移してもらいます。

もう一つワークフローを作成

```yaml:transition-issues.yml
on:
  push

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: "進行中"
```

ブラウザで適当にREADME.mdを更新してコミット
※本来はローカルでちゃんとブランチ切ってPRを出しましょうｗ
コミットメッセージに先程作成された「AC-4」という課題キーを含める
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/5a166116-9bf7-79e4-b3b4-4a3a3aed6e36.png)

ワークフローが起動し。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/a3c5e49a-b5f4-20d0-b8e4-b73fb8c6ce55.png)

ステータスが遷移しました！！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206219/7c730105-efa9-37d0-5691-9f2a0c64e190.png)

## おわりに
今回試した機能はJiraの[Github用アドオン](https://marketplace.atlassian.com/apps/1219592/github-for-jira?hosting=cloud&tab=overview)、スマートコミットでもできることではありますが、他にも面白い連携（コード内のTODOコメントを検知して課題を作成したり）がありますので引き続き触ってみようと思いました。

またGithub内の豊富なトリガーから起動できる点はアドオンには再現できないので、もっとユースケースが増えていくことを期待します。