【GitHub Actions】ワークフローの結果をSlack通知する
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から読み込むために、導入したいリポジトリに登録
<手順>
- 導入したい
Repository
のSettings
を選択。 - 左のメニューの
Secrets and variables
を選択-
Actions
を選択
-
- 右上の
New repository secret
を選択。 -
Name
にSLACK_WEBHOOK
を設定。(わかりやすければ命名は何でもOK) -
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
- Slack チャネルにメッセージを送信するGitHubActionLibraryを使っている
- https://github.com/rtCamp/action-slack-notify
-
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