アクションエラーハンドリング
ステップはtestが偽になったとき、またはアクション自体がエラーを返したときに失敗します。失敗しても同じジョブの残りのステップは実行され、ジョブは失敗扱いになります。そのジョブをneedsに指定したジョブは、always: trueがない限りスキップされます。ワークフローの終了ステータスは、testの失敗なら1、アクションのエラーなら3になります。
失敗を無視するための設定はありません。ワークフローを失敗させたくないチェックは、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)で変更できます。
後続の分岐
ジョブが失敗すると、それをneedsに指定したジョブはスキップされます。失敗したときにも動かしたいジョブにはalways: trueを付け、結果をoutputsとして公開して、そのジョブのskipifで値を評価します。リクエストが接続できなかったステップはoutputsを公開しないため、??で既定値を与えます。
name: Health
vars:
api_url: "{{API_URL}}"
jobs:
- id: health-check
name: Health Check
steps:
- name: Check
id: health
uses: http
with:
method: GET
url: "{{vars.api_url}}/health"
test: res.code == 200
outputs:
healthy: res.code == 200
- name: Alert
needs: [health-check]
always: true
skipif: outputs.health?.healthy ?? false
steps:
- name: Notify
uses: hello
echo: "{{vars.api_url}} is not healthy"関連項目
更新日時