導入:なぜ「失敗ジョブのみ再実行」が重要なのか?
CI/CDパイプラインを運用していると、ネットワークの一時的な瞬断や、外部APIのタイムアウトなど、コード自体には問題がないのにジョブが失敗することがあります。そんな時、ワークフロー全体を最初からやり直すと、成功していたジョブまで再実行されるため、待ち時間が発生し、ビルドコストも無駄になってしまいます。GitHub Actionsの「失敗ジョブのみ再実行」機能を使えば、失敗した箇所だけをピンポイントでやり直せるため、開発効率が劇的に向上します。
基礎知識:GitHub Actionsのジョブと再実行の仕組み
GitHub Actionsでは、ワークフローは複数の「ジョブ」で構成されます。各ジョブは独立した環境で動作しますが、前のジョブの結果を判定して次のジョブを動かす「依存関係(needs)」を持たせることができます。
「失敗ジョブのみ再実行」とは、ワークフロー全体をリランするのではなく、失敗した特定のジョブだけを再キューイングする機能です。これにより、成功済みのジョブが生成した成果物(アーティファクト)やキャッシュを有効活用しながら、最短時間でパイプラインを完了させることが可能です。
実装と操作手順
特別なコードを書かなくても、GitHubのUIから簡単に実行できます。
1. GitHubのリポジトリ画面で「Actions」タブを開く。
2. 失敗したワークフローの実行履歴をクリック。
3. 画面右上の「Re-run」ボタンの横にある矢印(ドロップダウン)をクリック。
4. 「Re-run failed jobs」を選択する。
これだけで、成功したジョブはスキップされ、失敗したものだけが再実行されます。
サンプルプログラム:再実行を想定したワークフロー例
再実行時に効率よく動作させるためには、ジョブ間で成果物を受け渡す設計が重要です。以下は、ビルド後にテストを行う典型的な例です。
name: CI Pipeline
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: ビルド実行
- name: 成果物のアップロード
- uses: actions/checkout@v3
- name: 成果物のダウンロード
- name: テスト実行
応用・注意点:現場で役立つアドバイス
・Flaky Test(不安定なテスト)の扱い:もし特定のテストが頻繁に失敗する場合、この機能で再実行するのは「対症療法」に過ぎません。根本的な解決として、テストの並列実行設定の見直しや、外部依存をモック化するなどの対策を検討しましょう。
・状態の保持:再実行時に前回の結果がキャッシュとして残っているか確認してください。もし「ビルド済みのデータ」が壊れたまま再実行されると、何度繰り返しても失敗する可能性があります。その場合は「Re-run all jobs」を選択して、クリーンな状態からやり直す判断も必要です。
・コスト管理:GitHub Actionsは実行時間に応じて課金されます。失敗ジョブのみの再実行はコスト削減に直結するため、チーム全体でこの操作方法を共有しておくことを強くおすすめします。

コメント