> 返回资讯列表
news_article.exe
📰

CircleCI のキャッシュ キー バグは、あなたのビルドの stale の依存関係を無声に処理しています

The CircleCI Cache Key Bug That's Silently Serving Your Builds Stale Dependencies

2026年9月3日5 次浏览来源:Dev.to 阅读原文

CircleCI パイプラインは緑色です。 すべてのジョブパス。 そして、まだあなたのアプリは、月に出荷されていない依存バージョンに対して実行されます - 誰もそれをコミットしない、誰もそれを結合しないように、それはただ静かに生産で示しました。 このようなバグを追いかけた場合、犯人はコードがほとんどない。 キャッシュキーです。 5分の読み取りと15分の修正です。 クイック・ウィン・フライデー、あなたの . 失敗モード CircleCI の依存キャッシュは、単純なコントラクトで動作します。依存関係が変更されたときに変化するキーを計算します(通常、ロックファイルチェックサム)、そのキーに縛られたキャッシュを保存/復元します。 契約は3つの特定の非常に一般的な方法で破棄します。 間違ったファイルをチェックサムします。 誰かが無事に介した自発的な依存性をぶつかるまで合理的に見えます...

CircleCI パイプラインは緑色です。 すべてのジョブパス。 そして、まだあなたのアプリは、月に出荷されていない依存バージョンに対して実行されます - 誰もそれをコミットしない、誰もそれを結合しないように、それはただ静かに生産で示しました。 このようなバグを追いかけた場合、犯人はコードがほとんどない。 キャッシュキーです。 5分の読み取りと15分の修正です。 クイック・ウィン・フライデー、あなたの . 失敗モード CircleCI の依存キャッシュは、単純なコントラクトで動作します。依存関係が変更されたときに変化するキーを計算します(通常、ロックファイルチェックサム)、そのキーに縛られたキャッシュを保存/復元します。 契約は3つの特定の非常に一般的な方法で破棄します。 間違ったファイルをチェックサムします。 誰かが触れることなく、自己の依存性を阻害するまで合理的に見えます。 チェックサムは動かない。 CircleCI は、先週の . の接頭辞マッチングをし、そのマッチングを正確に考えています。 CircleCI は、最初にプライマリキーを試し、順番でフォールトし、最初の 1 は既存のキャッシュエントリに対するプレフィックスマッチです。 "give me the latest match." もし、restore keys リストが粗すぎる場合 (例: )、完全に異なるブランチからビルドされたキャッシュを復元でき、完全に異なる lockfile で、ジョブが失敗しません。 何も(キャッシュヒット、モジュールが "there") にインストールするか、間違ったバージョンに対して実行するだけです。 バージョンエスケープハッチはありません。 あなたは必然的に、誰もが無効にキャッシュを強制する必要があるとき - 破損したキャッシュエントリ、パッケージマネージャの移行、ロックファイルフォーマットの変更 - 手動でのバスターを念頭に置いて設計されていないので、それを行うための安価な方法はありません。 それぞれが静かに失敗します。 ログに赤いXはありません。ログにエラーはありません。 スタレ状態で走るビルドと、ローカルが細かいため、誰もローカルを再現できないバグレポート3日後。 修正 現在のキャッシュブロックがこの形状のように見えるものは置換します。 4つの特定の変更、上記の失敗モードの1つを固定します。 チェックサムはロックファイル、マニフェストではありません。 / / — 実際に解決したバージョンをピントする。 "nothing change" が依存ツリーに関する真のステートメントである唯一のファイルです。 (または ) インストールコマンドとして、常に。 これは、まだ固定されていない故障モードの安全性ネットです。 キャッシュが何かのストールを復元した場合、凍らせたインストールは、静かにそれを再調整するのではなく、無声に一致したロックファイルで進むことを拒否します。 間違ったツリーで緑色にならないように、赤に行きたい。 最低限の特異から注文し、「何でもマッチする」の1つのレベルの不足を止めて下さい。 Branch-scoped は、まず、ブランチスコープの接頭辞秒、グローバル接頭辞は、真の最後のリゾートとして、真新しいブランチです。 ブランチが別のロックファイルでキャッシュを元通りに復元できるようにする、唯一のフォールバックとして持っていないでください。 クリーンなスレートが必要なときに、主要なバージョントークン(→)をBumpします。 これはあなたの手動キャッシュブスターです。 鍵自体に焼き込まれているため、全員の無効化が一線PRであるため、CircleCI へのサポートチケットや、プロジェクト設定 UI を介した旅行が手元でキャッシュをヌークするわけではありません。 実際のところ、YAMLの変更を出荷し、それを信頼しないでください。 行動を確認しながら、1 行のアサーションジョブステップを 1 週間追加します。 パッケージ名を依存関係に調整して、以前に噛むか、チームが誤ったバージョンを出荷したことを最も知りたいかを判断します。 その grep が失敗すると、キャッシュとロックファイルが掘り下げられ、今では CI では、静かではなく、プロダクションで大声で失敗します。 モノレポトラップ Yarn/npm のワークスペースまたは複数のロックファイルを持つモノレポにしている場合は、チェックサム関数は、それを伝えているハッシュのみです。 repo ルートでは、パッケージマネージャーが root lockfile にその解像度を返さない限り、ワークスペースパッケージの依存関係への変更をキャッチしません(ほとんどの場合、あなたのためそれを検証します)。 ネストされていないロックファイルがある場合

> 分享: