3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GitHubActions でプルリクの情報をレビューアにメンションをつけてSlack通知する

Posted at

GitHubActions でプルリクの情報をレビューアにメンションをつけてSlack通知する

1. はじめに

現在、自分の所属する開発チームでは、プルリク作成後、レビューアにSlackでその情報を送信しています。  
今回はGitHubActionsでプルリクの情報をSlackにメンション付きで通知するyml構文を書きました。  
これで、slackへの通知を自動化します。  

2. 実装

今回作成したコードのサンプルは以下です。

sample.yml
name: Send_Pullrequest-Message
on:
  pull_request:
   types:
    - ready_for_review
jobs:
  send_pullrequest-message:
    timeout-minutes: 2
    runs-on: ubuntu-latest
    steps:
    - name: member1
      if: github.event.pull_request.requested_reviewers[0].login == 'member1'
      run: echo "Login_Name=Slack_memberID" >> "$GITHUB_ENV"
    - name: member2
      if: github.event.pull_request.requested_reviewers[0].login == 'member2'
      run: echo "Login_Name=Slack_memberID" >> "$GITHUB_ENV"
    - name: member3
      if: github.event.pull_request.requested_reviewers[0].login == 'member3'
      run: echo "Login_Name=Slack_memberID" >> "$GITHUB_ENV"       
    - uses: slackapi/slack-github-action@v1.16.0
      if: env.Login_Name != '' 
      with:
        payload: "{\"text\":\" <@${{ env.Login_Name }}>\\n 以下のプルリクエストを作成しました。\\n 
         Title     : ${{ github.event.pull_request.title}}\\n 
         URL       : ${{ github.event.pull_request.html_url}}\\n
         Assignees : ${{ github.event.pull_request.assignees[0].login}}\\n
         Revwer    : ${{ github.event.pull_request.requested_reviewers[0].login}}\"}"     
      env:
        SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

3. GitHub Actionsを使用したSlack通知ワークフローの解説

3.1 ワークフローのトリガー

このワークフローは、Pull Requestの状態が"ready_for_review"に変化したときにトリガーされます。これにより、コードレビューの準備が整ったときにSlack通知を送信できます。  
運用に合わせて、「レビューアが割り当てられた」、「プルリクが作成された」時などにトリガーを変更できます。ワークフローのトリガについてはこちらを参照。  
※"ready_for_review"はドラフトプルリクエストからプルリクエストを作成したときのことです。

on:
  pull_request:
    types:
      - ready_for_review

3.2 ジョブの実行

ワークフローのジョブは、以下のステップから成り立っています。

3.2.1 メンションをつけて通知するための準備

Pull Requestが特定のレビュアーにアサインされたとき、それに対応するSlackメンバーに通知を送信します。
Slackにメンションをつけてメッセージを送信するためには、メンバーIDが必要になります。
SlackのメンバーIDの取得方法はこちらを参考
以下のコードはレビューアのGitのアカウント名を取得し、SlackのメンバーIDをマッピングし、環境変数に格納しています。

- name: member1
  if: github.event.pull_request.requested_reviewers[0].login == 'member1'
  run: echo "Login_Name=Slack_memberID" >> "$GITHUB_ENV"

同様のステップがmember2およびmember3のメンバーに対して設定されています。

3.2.2 Slack通知

条件に合致したメンバーがいる場合、Slack通知を送信します。これにはGitHub Actionsのワークフローが提供する環境変数を使用します。

- uses: slackapi/slack-github-action@v1.16.0
  if: env.Login_Name != ''
  with:
    payload: "{\"text\":\" <@${{ env.Login_Name }}>\\n 以下のプルリクエストを作成しました。\\n 
     Title     : ${{ github.event.pull_request.title}}\\n 
     URL       : ${{ github.event.pull_request.html_url}}\\n
     Assignees : ${{ github.event.pull_request.assignees[0].login}}\\n
     Revwer    : ${{ github.event.pull_request.requested_reviewers[0].login}}\"}"     
  env:
    SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

このステップでは、SlackのWebhookを介してメンション付きのメッセージを送信し、プルリクエストの詳細情報を表示します。
github.event.pull_request を使用してプルリクのタイトルやURL、reviewer、assignee を取得し、メッセージを送信しています。

4. 実行結果

実行してみると、以下のようにメンション付きでSlackにメッセージが送信されました!
image.png

開発チームで運用する際は、ドラフトプルリクエストをはじめに作成しておき、すべて完了してからプルリクエストに変更することでレビューアにメッセージを自動で通知してくれます。

5. おわりに

今回はGitHubActions でyml構文を使用してSlackにプルリク情報をメンション付きで送信しました。  
サンプルを元に少し変更するだけで、チームにあった運用が可能になると思いますので参考までにご活用ください。
今後チームで運用しながら、より便利なものに仕上げたいと考えております。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?