この Fail-fast matrix ワークフローは、マトリックス戦略で並列実行されるジョブが一部失敗しても、他のジョブを止めずに最後まで実行する設定例です。
コード解説
1. マトリックスの設定
yamlコピーする編集するstrategy:
fail-fast: false
matrix:
time: [10, 20, 30]
matrix.timeには[10, 20, 30]の3つの値があり、3つのジョブが並列に実行されます。- 各ジョブはそれぞれ
SLEEP_TIMEを 10秒、20秒、30秒に設定して動作。
2. fail-fast: false
- デフォルトでは fail-fast = true なので、1つのジョブが失敗すると、まだ動いていない他のジョブをキャンセルします。
fail-fast: falseにすることで、一部のジョブが失敗しても他のジョブが止まらず、全てのジョブが最後まで実行されるようになります。
3. 実行ステップ
yamlコピーする編集する- run: sleep "${SLEEP_TIME}" && exit 1
env:
SLEEP_TIME: ${{ matrix.time }}
- 各ジョブは
SLEEP_TIME秒スリープしてからexit 1でエラー終了します。 - それぞれ10秒・20秒・30秒で失敗しますが、fail-fastが無効なので全ジョブが最後まで実行されます。
実行結果イメージ
- 3つの並列ジョブ(10秒、20秒、30秒)が実行される。
- 10秒ジョブが失敗しても20秒、30秒ジョブは止まらず進行する。
- ワークフロー全体としては失敗(
exit 1があるため)となる。
よくある活用例
- 複数OS/環境でのテスト
- Ubuntu、Windows、macOSのどれかが失敗しても他の環境は最後まで実行。
- マトリックスでの並列ビルド
- 複数のPythonバージョン(3.8/3.9/3.10)でテストを回して結果を比較。
Odoo開発での応用例
- 複数のOdooモジュールを並列テスト
matrix: module: [sales, purchase, inventory]- どれかのテストが失敗しても他のテストを最後まで実行 → CI結果で全モジュールの成否をまとめて確認。
例:
yamlコピーする編集するstrategy:
fail-fast: false
matrix:
module: [sales, purchase, inventory]
steps:
- run: pytest addons/${{ matrix.module }}/tests
次のステップ提案
Odoo CI/CDで 「変更があったモジュールだけをマトリックスに動的投入」 するワークフローを作ると、
全モジュールを毎回テストせずに済み、CI時間を大幅短縮できます。
これを試しに 動的マトリックス + fail-fast: false で例を作ってみましょうか?
特定のステップが失敗したときだけ次のステップを実行する という「例外処理的」な動きを再現するものです。
次の提案
この例を Odoo CI/CDに適用して、テストが失敗したらSlackに通知し、成功ならECRにデプロイ という「フロー制御」を組み込んだサンプルを作ってみますか?
コメントを残す