GitHub Actionsでエラーの時だけ特定の処理を実行する
GitHub Actionsでエラーハンドリングのやり方に苦戦したので、メモしておく。
目的
GitHub Actionsでは通常、エラーが発生するとワークフローの実行が中断されてしまう。
しかしワークフローの実行結果をチャットへ通知したい場合などは、エラーであっても後続処理を実行する必要がある。
このような想定ユースケースにおいて、エラーであっても後続処理を実行し、ワークフローとしては失敗扱いとしたい。
検証コード
最初に正常終了する処理を実行し、その際のoutcome
を確認している。
その次は確実にエラー終了する処理を記述しているが、後続処理を続行できるようになっている。
エラーハンドリングが完了したらoutcome
で終了ステータスを参照し、エラーの場合は終了させている。
steps:
- name: Normal
id: normal_execution
run: echo "Normal execution"
- name: Show execution status
run: echo ${{ steps.normal_execution.outcome }}
- name: Error
# エラーでも処理を継続する
continue-on-error: true
# あとで実行結果を参照するため、IDを振っておく
id: error_execution
# ディレクトリが存在することで、2回目は確実にエラーになる
run: |
mkdir hoge
mkdir hoge
- name: Error handling
if: ${{ steps.error_execution.outcome == 'failure' }}
run: |
echo "Error handling"
echo ${{ steps.error_execution.outcome }}
exit 1
ファイル全体はこちら(GitHub)を参照。
検証コードの実行結果
通常であればError
で発生したエラーによりワークフローが中断されるが後続処理を続行し、Error handling
を実行した後に終了している。
検証コードでやっていること
エラーでも途中で終了せず、後続処理を続行する
continue-on-error
にtrue
を指定することで、終了ステータスがエラーでもワークフローの実行が中断されなくなる。
サンプル:確実に失敗するコマンドを実行しても、ワークフローの途中で中断されない
- name: Error
continue-on-error: true
run: |
mkdir hoge
mkdir hoge
コマンドの終了ステータスを後続処理で参照する
後から終了ステータスを参照したいコマンド実行時にid
を指定しておくことで、後からsteps
のoutcome
として実行ステータスを参照することができる。
サンプル:error_execution
の実行ステータスを後続処理で参照し、エラーであれば終了させる
- name: Error
id: error_execution
continue-on-error: true
run: |
mkdir hoge
mkdir hoge
- name: Error handling
if: ${{ steps.error_execution.outcome == 'failure' }}
run: |
echo "Error handling"
echo ${{ steps.error_execution.outcome }}
exit 1