2
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?

GitHub ActionsAdvent Calendar 2023

Day 9

GitHubでIssueが作成されたらGitHub ActionsでSlackへ通知する

Last updated at Posted at 2023-12-08

はじめに

GitHubでIssueが作成されたらチャットへ通知がほしい、なんてことありますよね。
本記事では、GitHubでIssueが作成されたらGitHub ActionsでSlackへ通知する、ということをやってみたいと思います。

1. Slack側で通知先のチャンネルのIncoming Webhooks URLを取得

以下のSlackのページを参照し、通知先のチャンネルとIncoming WebhooksのURLを取得します。
https://api.slack.com/messaging/webhooks

以下のような形でWebhook URLが生成されるのでコピーしておきます。
スクリーンショット 2023-11-17 230506.png

2. GitHub Actionsを利用したいリポジトリのSecrets and variablesにWebhook URLを保存

ワークフローファイルにWebhook URLをハードコーディングしても良いのですが、ここはSecrets and variablesに保存しましょう。
GitHub側でGitHub Actionsを利用したいリポジトリを選択し、一番右のSettingsタブを選択します。
image.png

左サイドメニューのSecrets and variables→Actionsを選択します。
image.png

New repository secretボタンをクリックし、
image.png

NameにSLACK_WEBHOOK_URL(これは任意の名前でOK)、Secretに1で取得したWebhook URLを貼り付けてAdd secretボタンをクリックします。
image.png

これでSecrets variablesにWebhook URLの保存は完了です。

3. ワークフローファイルの作成

ここからが本題になります。まずはワークフローファイルを作成していきます。
ワークフローファイルは、リポジトリルートに「.github/workflows」というディレクトリを作成し、その中に作成する必要があります。
そのため、今回の例では「.github/workflows/created-issues.yml」という形で作成します。
実際に作成してみたものが以下になります。

.github/workflows/created-issues.yml
name: Created Issues
on: issues

jobs:
  Slack-Notification:
    name: Send-Notification
    runs-on: ubuntu-latest
    steps:
      - name: Send GitHub Action trigger data to Slack workflow
        id: slack
        uses: slackapi/slack-github-action@v1.24.0
        with:
          payload: |
            {
              "text": "Created Issues"
            }
        env:
          SLACK_WEBHOOK_URL: ${{secrets.SLACK_WEBHOOK_URL}}

3-1. 各ステップ(構文)の説明

1行名:name(非必須)

ワークフローの名前を指定するものです。Actoinsの画面の左サイドバーに表示されます。
image.png
省略すると相対パス「.github/workflows/ワークフローファイル名」がワークフロー名になります(この例ですと「.github/workflows/created-issues.yml」

2行目:on(必須)

ワークフローを実行するトリガーを指定します。今回の場合はIssueが作成されたタイミング(正確には「issues」はissueが作成もしくは変更されたタイミングがトリガーとなる)をトリガーとしたいので「issues」を指定しています。トリガーは様々なものが用意されており、以下から確認できます。
https://docs.github.com/ja/actions/using-workflows/events-that-trigger-workflows

4行目:jobs(必須)

ワークフローはジョブと呼ばれる関連する一連の操作の塊単位で実行されます。ジョブの中の各操作はステップと呼ばれます。ジョブは一つ以上の複数のジョブで構成されます。以下はジョブとステップの概念図です。
※GitHub Actions公式より引用
image.png

5行目:Slack-Notification

ジョブIDになります。命名方法は任意ですがどのようなジョブなのかが分かるように命名します。今回の例ではSlackへ通知を送るジョブのため「Slack-Notification」としています。
使える文字は「数字」「アルファベット」「-」「 _ 」のみで、「アルファベット」もしくは「 _ 」で始める必要があります。ジョブを複数作る場合、重複はできません。

6行目:name(非必須)

ジョブの名前になります。Actionsの実行サマリの画面で表示されます。
image.png
省略するとジョブIDが表示されます。

7行目:runs-on(必須)

ジョブが実行されるマシンを指定します。runs-onに関しては別記事で詳細を投稿します。

8行目:steps(必須)

ジョブ内のステップを定義するものです。この定義の下から具体的なステップを定義していきます。

9行目:-name(非必須)

ステップの名前を指定するものです。Actionsの実行詳細の画面で表示されます。
image.png
省略するとそのステップで実行するコマンドが表示されます。

10行目:id(非必須)

ステップのIDを指定するものです。ステップのIDを指定することで別のステップから参照することができます。今回は使っていませんが便宜上あえて記述しています(なくても動きます)。
https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsid

11行目:uses(非必須)

GitHub Actionsでは、繰り返し利用されることが想定されるタスクはアクションとして事前に定義されています。また、サードパーティ製のアクションもGitHubのMarketplaceで提供されており、そこのアクションも利用することができます。こういったアクションを利用することで、ワークフローファイルのコード量を削減することができます。
今回の例では、「SlackのIncoming Webhook URLに対してPostリクエストを送信する」ということをやりたいのですが、その処理は既にMarketplaceで「slack-send」というアクションが提供されいているため、そのアクションを利用しています。

12行目~18行目:

上述したslack-sendの使い方に倣って定義しています。単純に送信したいテキストと「2. GitHub Actionsを利用したいリポジトリのSecrets and variablesにWebhook URLを保存」で保存したWebhook URLをenvで指定します(GitHub Actionsではenv句を利用して変数が利用できます)。

4. 動作確認

これで準備は完了したので、動作確認として適当にIssueを作成します。

次にリポジトリのActionsタブをクリックし対象のワークフローを確認します。
image.png
成功していますね。

次にSlackも確認してみましょう。
image.png

ちゃんと通知が来ていることを確認できました。

最後に

今回の例では、簡単な通知のアクションを作成してみました。
Issuesに関するトリガーは他にも、

Issueにコメントがついた場合.
on:
  issue_comment:
issueが削除された場合.
on:
  issues:
    types: [deleted]

といった具合に様々なものがあります。詳細は以下のIssuesトリガーに関するドキュメントで確認することができます。
https://docs.github.com/ja/actions/using-workflows/events-that-trigger-workflows#issues

以上です。

参考

2
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
2
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?