アクションエラーハンドリング
ステップはtestが偽になったとき、またはアクション自体がエラーを返したときに失敗します。失敗しても同じジョブの残りのステップは実行され、ジョブは失敗扱いになります。そのジョブをneedsに指定したジョブはスキップされ、ワークフローの終了ステータスは1になります。
失敗を無視するためのスイッチはありません。ワークフローを失敗させたくないチェックは、testで判定せず結果をoutputsとして記録します。
steps:
- name: Required check
uses: http
with:
method: GET
url: "{{vars.api_url}}/health"
test: res.code == 200
- name: Optional check
id: optional
uses: http
with:
method: GET
url: "{{vars.api_url}}/experimental"
outputs:
available: res.code == 200
detail: res.code >= 400 ? res.status : ""
- name: Report
uses: hello
echo: "Experimental endpoint: {{outputs.optional.available ? 'available' : outputs.optional.detail}}"一時的な失敗とハング
一時的な失敗にはretry、応答が返らないおそれのあるステップにはtimeoutを使います。
- name: Flaky endpoint
uses: http
timeout: 10s
retry:
max_attempts: 3
interval: 2s
with:
method: GET
url: "{{vars.api_url}}/flaky"
test: res.code == 200retryのパラメータはmax_attempts(必須、1以上)、interval、initial_delayです。max_attemptsの上限は環境変数PROBE_MAX_ATTEMPTS(既定10000)で変更できます。
後続の分岐
他のジョブが失敗したかどうかで分岐する手段はありません。ジョブが失敗すると後続はスキップされるためです。結果に応じて処理を変えたい場合は、結果をoutputsとして公開し、後続のジョブがskipifで判断します。
jobs:
- id: health-check
name: Health Check
steps:
- name: Check
id: health
uses: http
with:
method: GET
url: "{{vars.api_url}}/health"
outputs:
healthy: res.code == 200
- name: Alert
needs: [health-check]
skipif: outputs.health.healthy
steps:
- name: Notify
uses: hello
echo: "{{vars.api_url}} is not healthy"関連項目
更新日時