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