🚀
GitHub Actionsで1つ以上のジョブが失敗した場合にSlackに通知する
1つのワークフロー内で1つ以上のジョブが失敗した場合に、特定のSlack channelに通知する方法を記載する。
要約
- ジョブの依存関係は
needs
で制御できる - ワークフローのURLは
${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
にて構築できる - Slack通知は公式のActions slack-send · Actions · GitHub Marketplace を使用できる
サンプルコード
以下、Slackのワークフロービルダーを使用する場合のサンプル。 job1
と job2
を並列で実行し、その結果を notify
ジョブで送信有無を処理する。
name: Sample workflow
on:
push
jobs:
job1:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
job2:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Exit code
run: exit 1
notify:
runs-on: ubuntu-latest
needs: [job1, job2]
if: ${{ failure() }}
steps:
- name: Send GitHub Action trigger data to Slack workflow
uses: slackapi/slack-github-action@v1.16.0
with:
payload: |
{
"url": "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WORKFLOW_WEBHOOK_URL }}
-
needs
を使用して、ジョブリストの結果を待つ -
failure()
により、needsで設定したジョブリストが失敗した場合に後続処理を実行する- ドキュメントでは以前のステップが対象と記載されているが、ジョブを跨いでも作用するExpressions - GitHub Docs
- Slackへの通知は公式が提供しているActionsを使用する。通知方法は3つある。ワークフロービルダーは有料プランのみ使用できるが、Actionsではパラメータのみ送信し、メッセージはSlack内で書けるので柔軟に変えたい場合は便利。
- ワークフローのURLは
github
のコンテキストが持つ要素から構築する
注意点
ジョブIDが取得できない
ジョブ単位のURL(URL形式 https://github.com/:org/:repo/runs/:id
)を構築するために必要なIDは、Actionsではサポートされておらず取得できない。 コミュニティのIssueは get action job id - Code to Cloud / GitHub Actions - GitHub Community から参照できる。
参考
- Slack が提供する GitHub Action "slack-send" を使って GitHub から Slack に通知する - Qiita
- Get Runs Url - Code to Cloud / GitHub Actions - GitHub Community
- Run GitHub actions job only if previous job has failed - Code to Cloud / GitHub Actions - GitHub Community
- get action job id - Code to Cloud / GitHub Actions - GitHub Community
- Getting the run id of a run in Github Actions - Code to Cloud / GitHub Actions - GitHub Community
Discussion