CI/CD パイプラインが週次で停止した原因:キャッシュ肥大とその教訓
Boollo 編集部
要点
週次で発生していた CI 障害の根因は、単一の設定ミスではなく、キャッシュ容量の増加を誰も監視していなかった運用体制そのものにあった。
症状と最初の対応
毎週特定の曜日にビルドがタイムアウトする現象が続いていた。最初の対応は個別のジョブのタイムアウト値を延長することだったが、根本原因には触れていなかったため、翌週も同じ現象が再発した。
根因:キャッシュの無制限な増加
調査の結果、依存関係キャッシュが週を追うごとに肥大し、キャッシュの復元自体に時間がかかるようになっていたことが判明した。主要 CI サービスのキャッシュ仕様に関する公式ドキュメントでは、キャッシュには保存容量の上限があり、古いエントリは自動的に退避されると説明されているが、退避のタイミングと復元コストの関係までは可視化されていなかった。ただし、キャッシュを完全に無効化する選択肢は、依存関係の再インストールによるビルド時間増加という別の問題を招くため、単純な解決策ではない。
再発防止:観測性の欠如という本当の問題
今回のポストモーテムから得られた教訓は、キャッシュサイズの推移をダッシュボードで可視化し、閾値を超えたら通知する仕組みがなかったことが根本原因だという点である。設定ミスは表面的な引き金にすぎず、それに気づけなかった観測性の欠如こそが再発を許した構造だった。イメージビルドのキャッシュ設計とパイプラインのキャッシュ設計は根が共通しており、同様の間欠障害は大規模障害の事後分析でも繰り返し観測されるパターンである。
間欠的な障害の多くは、原因そのものより、それに気づく仕組みの不在によって長期化する。