終了ステータスが0
以外で終了した時デフォルトでは、そのステップのジョブはそこで終了されます。単にジョブの全ステップが正常に実行されて終了することを期待するのであれば、この仕様は直感的で扱いやすいものです。ですが時々、予期していない出来事で最後まで完了しなかった場合だけ後処理を実行したい場合があったりします。
GitHub Actions ではそのような「エラーの時の後処理」を記述できる仕組みが提供されてます。また同じように「正常終了時の後処理」というような仕組みも用意されてます。
関数
GitHub Actions には以下の終了ステータスに関する関数が使えます。
success
failure
cancelled
always
これらの関数は真偽値を返すので、主に<step>.if
に渡して使います。
success
success
は前回のステップの終了ステータスが0
の時true
になる関数です。以下のワークフローではecho success
も実行されます。
jobs:
build:
- run: echo foo
- if: success()
run: echo success
failure
jobs:
build:
- run: exit 1
- if: failure()
run: echo failure
注意点として、一度終了ステータスが0
以外のもので終了したステップがある時点で、そのワークフローは失敗した扱いになるというのがあります。このワークフローはecho
で正常に終了してますが、これもワークフローは失敗という扱いになります。
使い所はワークフローが失敗したことに対する後処理を行う為に使うと良いと思います。
jobs:
build:
- continue-on-error: true
run: exit 1
- if: failure()
run: echo failure
cancelled
jobs:
build:
steps:
- run: sleep 60
- if: cancelled()
run: echo cancelled
always
jobs:
build:
steps:
- run: exit 1
- if: always()
run: echo always
- if: failure()
run: echo failure
always
もfaiure
と同じく、一度終了ステータスが0
以外で終わったステップがある時点で、そのワークフローは失敗扱いになります。