🌊

【GitHub Actions】ワークフローの結果をSlack通知する

2023/03/11に公開

GitHub Actionsのワークフローが成功/失敗した時に、それをslackに通知するやり方です。

事前準備

Slack の「App」にGitHubを追加する

https://developer.mamezou-tech.com/blogs/2022/12/12/notify-github-actions-workflow-to-slack/

SlackでWeb hook URLを取得

Slack の「 Incoming Webhook」 を利用

https://w1625424953-rox450381.slack.com/apps/A0F7XDUAZ--incoming-webhook-?tab=more_info

  • チャンネルへの投稿:通知したいチャンネルを選択
    • #テストというチャンネルに通知がいくように設定
  • Webhook URL:URLが表示されるのでこれを必ずコピー(あとで登録するのに使います)

GitHubのリポジトリにWebhook URLを登録する

さっきコピーしたWebhook URLをGitHub Actionsから読み込むために、導入したいリポジトリに登録

<手順>

  1. 導入したい Repository の Settingsを選択。
  2. 左のメニューの Secrets and variables  を選択
    1. Actionsを選択
  3. 右上の New repository secret を選択。
  4. Name に SLACK_WEBHOOK を設定。(わかりやすければ命名は何でもOK)
  5. Value に取得した Webhook URL を入力

Github Actionsの設定

Github Actionsでslack通知のワークフローをymlファイルに書いていきます

.github/workflows/github-actions-demo.yml

name: Slack Notification

on: [push]

env:
  SLACK_USERNAME: DeployBot
  SLACK_ICON: https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png
  SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}

jobs:
  slackNotification:
    name: Slack-Notification
    runs-on: ubuntu-latest

    steps:
    #-- Gitリポジトリの内容を取得 --#
    - name: Checkout
      uses: actions/checkout@v3

    #-- Slack通知 --#
    # 成功
    - name: Slack Notification on Success
      uses: rtCamp/action-slack-notify@v2
      if: ${{ success() }}
      env:
        SLACK_TITLE: Deploy / Success
        SLACK_COLOR: good
        SLACK_MESSAGE: デプロイ完了しました🚀

    # 失敗
    - name: Slack Notification on Failure
      uses: rtCamp/action-slack-notify@v2
      if: ${{ failure() }}
      env:
        SLACK_TITLE: Deploy / Failure
        SLACK_COLOR: danger
        SLACK_MESSAGE: デプロイ失敗しました😢

上記のワークフローを軽く説明

<トリガー>

  • pushされたときにActionが動く

<slack通知>

  • rtCamp/action-slack-notify@v2

  • env

    • SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}(必須)
      • ここでリポジトリに登録したWebhook URLを読み込む
    • SLACK_USERNAME: DeployBot(任意)
      • 通知時のユーザー名
    • SLACK_ICON: https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png(任意)
      • 通知時のアイコン
  • 成功時/失敗時のslack通知

    • if: ${{ success() }}で条件文でステータスチェック関数のsuccessを指定し、

    前のステップで失敗もしくはキャンセルされたものがない場合に true を返します。

    ステップに成功したら、slackにタイトル、メッセージを設定し通知がいくようになっている

    失敗時は、ステップが失敗した場合に true を返し失敗用の通知がいきます。

変数の設定よって、通知内容のカスタム可能

検証

実際に適当にpushしてslackに通知がいくか検証

pushがトリガーになり、Actionが動く

成功したので、Slack Notification on Successが動く

指定したslackチャンネルに以下のように通知がいく

ymlファイルで指定した通知内容でメッセージがきた

失敗時の通知

エラーシューティング

ずっと403エラーが起きていて沼っていた

原因:Webhook URLが違っていた

解消:正しいWebhook URLを設定し直す

Incoming Webhookを指定したら、チャンネルに以下ようなメッセージが届く

リンクをクリックし、Webhook URLを確認し設定し直す。

またGmailにも連絡きていたのでそこで確認し設定し直す。

参考

https://github.com/rtCamp/action-slack-notify

https://docs.github.com/ja/actions/learn-github-actions/expressions

Discussion