GitHub Actionsのjobが失敗した時に簡単にSlackに通知する方法を探していたら、Slack公式のツールを使えば結構簡単にできたので共有します。Slack Workflowとslack-github-actionを組み合わせると良い。
できたもの
ジョブが失敗した時だけ、以下のようにSlackに通知される。
やり方
- Slack Workflowでパラメーターを付けられるwebhookを用意する
- GitHub Actionsで失敗時のみwebhookに通知する
Slack Workflowでパラメーターを付けられるwebhookを用意する
まずはSlack Workflowでパラメーターを付けられるwebhookを用意する。Workflowで用意すると、管理も簡単だしCollaboratorも付けやすい。
Workflow BuilderでCreateボタンを押し、Workflow名を入力し、Webhookを選択する。
続いてAdd Variablesをして、urlというパラメーター名を追加。このurlというパラメーターは、GitHub Actionsの失敗したRunsへのURLを入れるために利用する。
最後にAdd Stepを押し、Send a messageを選択し、さきほどのurl変数を使ってメッセージを作る。
これでSlack Workflow側の設定は完了。
GitHub Actionsで失敗時のみwebhookに通知する
まずはSecretsのページ(例: https://github.com/shibayu36/actions-failure-to-slack-sample/settings/secrets/actions)で、SLACK_WEBHOOK_URLという名前で先程のWebhookのURLを追加しておく。
さらにworkflowのファイルを追加する。
name: Run job and notify failure to Slack on: workflow_dispatch: push: branches: - main jobs: Job: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Random exit run: exit $(($RANDOM%2)) - name: Notify slack when job failed if: ${{ failure() }} uses: slackapi/slack-github-action@v1.17.0 with: payload: | { "url": "${{github.server_url}}/${{github.repository}}/actions/runs/${{github.run_id}}" } env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
ポイントは
if ${{ failure() }}
を使うことで、以前のステップのいずれかが失敗した場合に実行することができる- slackapi/slack-github-actionをドキュメント通りに利用する
- https://github.com/slackapi/slack-github-action
- Workflowを使う形式以外もサポートしている
- 該当ActionのURLは自分で作る必要がある
まとめ
以上の設定でジョブが失敗した時だけSlackに通知を送れるようになりました。Slackの昔のWebhookは管理が大変 & ちょっとしたWebhookのためにSlack App作るのも大変だったので、より管理しやすいWorkflowで簡単にWebhookを作れるのも便利ですね。