👻
GitHub Actions - Worflowが開始・終了したらSlack通知してみる
特定のWorkflowが開始・終了したらSlack通知したい場面は多々あると思う
そんな時に、どのようはどうすればよいのか整理しておく
on:workflow_run
Workflowを起動できるEventの1つにworkflow_run
がある。
これは、Workflowが開始・終了した時に発行されるものである。
対象のWorkflowや、開始・終了、ブランチなどを指定できる。
on:
workflow_run:
workflows: [workflow1, workflow2]
types: [requested, completed]
branches: [main]
Workflowが開始・終了したら処理する
types: [requested]
とすると開始した時のEvent
を対象とできる。
types: [completed]
とすると終了した時のEvent
を対象とできる。
開始したときは、github.event.workflow_run.conclusion
にnull
が入っている。
終了したときは、github.event.workflow_run.conclusion
に"success"
または"failure"
が入っている。
なので、types: [requested, completed]
とし、github.event.workflow_run.conclusion
の値に応じてJob
の処理条件を設定すれば、Workflowが開始・終了(成功・失敗)したら処理することができる。
workflow_run.yml
name: workflow_run
on:
workflow_run:
workflows: [helloworld]
types: [requested, completed]
jobs:
on-requested:
runs-on: ubuntu-20.04
if: ${{ github.event.workflow_run.conclusion == '' }}
steps:
- run: echo 'requested'
on-success:
runs-on: ubuntu-20.04
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- run: echo 'success'
on-failure:
runs-on: ubuntu-20.04
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
steps:
- run: echo 'failure'
Slack通知する
Slack Send GitHub Actionを使うと手軽にSlack通知できる。
Workflowが開始・終了したらSlack通知する
で、on:workflow_run
で起動するWorkflowで、Slack通知を行ってみると、次のような感じになる。
後は、必要に応じて通知内容をカスタマイズすれば良いと思う。
workflow_run.yml
name: workflow_run
on:
workflow_run:
workflows: [helloworld]
types: [requested, completed]
jobs:
on-requested:
runs-on: ubuntu-20.04
if: ${{ github.event.workflow_run.conclusion == '' }}
steps:
- uses: slackapi/slack-github-action@v1.18.0
with:
payload: |
{
"text": "requested"
}
env:
SLACK_WEBHOOK_URL: "https://hooks.slack.com/services/....."
on-success:
runs-on: ubuntu-20.04
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- uses: slackapi/slack-github-action@v1.18.0
with:
payload: |
{
"text": "success"
}
env:
SLACK_WEBHOOK_URL: "https://hooks.slack.com/services/....."
on-failure:
runs-on: ubuntu-20.04
if: ${{ github.event.workflow_run.conclusion == 'failure' }}
steps:
- uses: slackapi/slack-github-action@v1.18.0
with:
payload: |
{
"text": "failure"
}
env:
SLACK_WEBHOOK_URL: "https://hooks.slack.com/services/....."
まとめ
このやり方の場合は、各Workflowで通知用のStepを記述する必要がなく、通知用のWorkflowを1つ用意すればOKとなる。
しかし、通知周りは設定で管理したい感じはある。
Discussion