Lesstep
Bitbucket Cloud・Pipelines・2026年10月29日に確認

Bitbucket Pipelines:キャッシュが効かない

bitbucket-pipelines.yml に caches を足したのに、毎回のビルドが全部をダウンロードし直す。Bitbucket がキャッシュを保存するのはいくつかの条件がそろったときだけで、保存しなかった理由はステップのログに書いてあります。まずそこを見て、下の原因と照らします。

どこを見るか

キャッシュが効かない7つの理由

Atlassian の記事(Pipeline build cache-related issues)と caches のページから:

  1. 足してから、成功したステップがまだ無い。キャッシュは成功したステップの後にだけ保存されます。失敗したステップは何もアップロードしません。
  2. 圧縮して 1 GB を超えている。それより大きいキャッシュは保存されません。ディレクトリを2つ以上のキャッシュに分けます。
  3. 空。道具が、書いた場所とは別の所に入れています。入れるコマンドの後に ls -lah <キャッシュのディレクトリ> を足して中身を見て、本当のディレクトリを指します。
  4. 期限が切れた。キャッシュは1週間で消えます。次に成功したステップが、新しく保存します。
  5. 固定のキャッシュで、依存が変わった。パスだけで書いたキャッシュや定義済みのキャッシュは、依存が変わると使われも更新もされません。Docker のキャッシュでは、Dockerfile が変わると同じことが起きます(レイヤーが合わなくなる)。Caches から消すか、ファイルを鍵にします(下)。
  6. Docker のキャッシュを Runtime v3 のステップで使っている。定義済みの Docker キャッシュは、そこでは廃止されています。teardown に「Docker cache upload is not supported in this environment」と出ます。Docker の buildx のキャッシュを使います。
  7. Docker のキャッシュを前の実行環境で使っている。既知のバグ(BCLOUD-23193)で、いつも使われるとは限りません。直るまでは、そのステップを Runtime v3 にして buildx のキャッシュを使うよう、Atlassian は勧めています。

caches のページにある上限があと2つ:並列のステップはキャッシュを読めても書けません。キャッシュはいつ消えてもおかしくないので、ビルドはキャッシュ無しでも通るようにしておきます。

定義済みのキャッシュと、その中身

名前ディレクトリ
nodenode_modules
composer~/.composer/cache
maven~/.m2/repository
gradle~/.gradle/caches
pip~/.cache/pip
dotnetcore~/.nuget/packages
ivy2~/.ivy2/cache
docker/var/lib/docker

一覧に無い道具や、別の場所に入れる道具には、definitions に自分のキャッシュを書きます。たとえば ~/.npm や ~/.cache/Cypress。

ロックファイルに合わせて変わるキャッシュ

ファイルを鍵にすると、そのファイルが変わったときに Pipelines がキャッシュの新しい版を作るので、古い依存を使い続けません:

definitions:
  caches:
    npm-deps:
      key:
        files:
          - package-lock.json
      path: node_modules

pipelines:
  default:
    - step:
        caches:
          - npm-deps
        script:
          - npm ci
          - npm test

手でやり直すには、キャッシュの名前を変える(npm-deps-v2)か、Caches ボタンから消します。

ビルドの時間を IntelliJ IDEA で見る

Pipeline Inbox for Bitbucket Pipelines は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。Bitbucket Cloud の全部のリポジトリのパイプラインを IDE のツールウィンドウに並べ、ステップごとの時間、パイプラインのビルド時間(build minutes)、teardown まで含めたステップのログを見せるので、キャッシュが保存されたか、次のビルドが速くなったかが分かります。一覧・ステップ・ログは無料。実行・やり直し・停止は Pro(月 US$1.50・30日の無料試用つき)。

JetBrains Marketplace で入れる

Atlassian・Bitbucket・Bitbucket Pipelines は Atlassian の商標、Docker は Docker, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Atlassian・Docker・JetBrains のいずれとも提携しておらず、承認も受けていません。

ほかに:push したのに Pipelines が動かない · 「Exceeded build time limit of 120 minutes」 · 「Container 'Build' exceeded memory limit.」 · 「Container 'docker' exceeded memory limit.」 · 「unexpected system error」 · 「command not found」 · サブモジュールを取ってこない · 「We couldn't clone the repository」 · 「No online runner available」 · 「No space left on device」 · 「Step exceeded processing limits」 · 次のステップにアーティファクトが無い · 前は通ったビルドが今は落ちる · Build setup に時間がかかる · ビルド時間を使い切った · 「Permission denied to update branch」 · 「You have reached your pull rate limit」(Docker Hub) · 「There is an error in your bitbucket-pipelines.yml」 · 「This pipeline was paused」(デプロイ) · IntelliJ IDEA の Bitbucket Pipelines 用プラグインの比較 · English