Skip to Content
リファレンスアクションエラーハンドリング

アクションエラーハンドリング

ステップは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 == 200

retryのパラメータはmax_attempts(必須、1以上)、intervalinitial_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"

関連項目

  • 変数 - ステップで使える変数
  • YAML設定 - retrytimeoutのプロパティ
更新日時