キャッシュ

Bitbucket Pipelines では、ビルド間で外部のビルド依存関係やディレクトリ (サードパーティ ライブラリなど) をキャッシュし、ビルドを高速化して、ビルド時間の消費を減らします。

依存関係のキャッシュとは

ほとんどのビルドでは、インターネット関係から依存関係をダウンロードするコマンドを最初に実行します。これにより、各ビルドで長い時間が必要になることがあります。依存関係のほとんどは変更されないため、依存関係を毎回ダウンロードするのではなくキャッシュに一度ダウンロードして、以降のビルドで再使用できるようにすることをおすすめします。

キャッシュのセットアップ

キャッシュを有効にするには、cashes セクションを step に追加します。

事前設定済みのキャッシュを使用して Node.js プロジェクト用の node_modules ディレクトリをキャッシュする方法を、以下の例でご覧ください。

1 2 3 4 5 6 7 8 9 10 bitbucket-pipelines.yml pipelines: default: - step: caches: - node  script: - npm install - npm test

このパイプラインが初めて実行されるときにはノード キャッシュが見つからないため、npm コマンドによってインターネットから依存関係がダウンロードされます。以降のビルドでは、アトラシアンのサービスによって依存関係がキャッシュされるため、ビルドへのロード時間が短くなります。

事前定義済キャッシュ

Pipelines は、一般的に使用されている言語ツール用に事前定義済みのキャッシュ場所を提供します。

キャッシュ名

ステップ内での記載方法

ディレクトリ

Docker

1 2 caches: - docker

n/a -  ビルドにより生成されたレイヤーからキャッシュを作成します

composer

1 2 caches: - composer

~/.composer/cache

dotnetcore

1 2 caches: - dotnetcore

~/.nuget/packages

gradle

1 2 caches: - gradle

~/.gradle/caches

ivy2

1 2 caches: - ivy2

~/.ivy2/cache

Maven

1 2 caches: - maven

~/.m2/repository

node

1 2 caches: - node

node_modules

pip

1 2 caches: - pip

~/.cache/pip

sbt

1 2 3 caches: - sbt - ivy2

~/.sbt

~/.ivy2/cache

sbt ツールを使用する場合、sbt と ivy2 キャッシュの両方を有効にする必要があることにご注意ください。

その他のビルド ツールやディレクトリ用のカスタム キャッシュ

お使いのビルド ツールが上記に記載されていない場合も、bitbucket-pipelines.yml ファイルでリポジトリ用のカスタム キャッシュを定義できます。最初に、yml の definitions セクションでキャッシュ名とキャッシュするディレクトリを定義します。次に、任意の step でそのキャッシュを参照します。

1 2 3 4 5 6 7 8 9 10 11 12 image: ruby:2.4.0 pipelines: default: - step: caches: - bundler #cache is defined below in the definitions section script: - bundle install --path vendor/bundle definitions: caches: bundler: vendor/bundle

定義されているキャッシュは、最初に成功したビルドの後で保存されます。

キャッシュのディレクトリ パスは、クローン ディレクトリに対して絶対/相対に指定できます。例:

  • $HOME/.npm

  • ~/.gradle/wrapper

  • /usr/local/lib/node_modules

  • vendor/bundle

Ruby の場合、システムの gem リポジトリとは異なる場所に gem をインストールする必要があります。例:

 

1 $ bundle install --path vendor/bundle

複数のディレクトリのキャッシング

ビルドによっては、複数のディレクトリをキャッシュすることが効果がある場合があります。ステップでは、複数のキャッシュを次のように簡単に参照できます。

1 2 3 4 5 6 7 8 9 10 11 12 image: openjdk:8 pipelines: default: - step: caches: - gradle # pre-defined cache - gradlewrapper # custom cache that must be defined below script: - ./gradlew build definitions: caches: gradlewrapper: ~/.gradle/wrapper

キャッシングのしくみ

キャッシュはいつ保存されますか。

キャッシュが空の場合、ビルドに成功するとキャッシュが保存されます。1 GB 未満に圧縮されたキャッシュのみが保存されます。

キャッシュを 1 GB 未満に圧縮するには、docker デーモンの元のイメージのサイズを 2 GB 未満にする必要があります。
bitbucket-pipelines.yml のスクリプトに次のコマンドを追加すると、サイズを確認できます。

docker image inspect $(docker image ls -aq) --format {{.Size}} | awk '{totalSizeInBytes += $0} END {print totalSizeInBytes}'

キャッシュはいつ復元されますか。

保存されたキャッシュが利用可能で、対象のディレクトリに配置されている場合、各ビルドの最初にダウンロードされます。

キャッシュはいつクリアされますか。

キャッシュは生成から 1 週間が経過すると、自動的にクリアされ、次回のビルド中に再生成されます。キャッシュは Bitbucket UI から手動でクリアすることもできます。Pipelines ページの右上にある [キャッシュ] を選択し、ゴミ箱アイコンを使用して一覧からキャッシュを破棄します。

べストプラクティス

依存関係のキャッシングは、同じファイルを何度もダウンロード/ビルドするのを防ぐことでビルド時間を短縮します。

つまり、次のような情報をキャッシュすることをおすすめします。

  • 言語固有の依存関係。

  • コンパイルに時間がかかる依存関係のバイナリ。

次の情報をキャッシュすることはおすすめしません。

  • パスワードや資格情報などの機密データ

注: Atlassian では symlink のキャッシュを保持しません。そのため、ご利用のデータが symlink に大きく依存している場合、キャッシュ作成を実行しても効果がない可能性があります。

キャッシュは一時的なものであることにご注意ください。キャッシュが存在するかどうかに関係なく機能するようにビルドを構成する必要があります。

最終更新日 2020年11月19日)
次でキャッシュ 9:00 PM on Oct 21, 2021 |

その他のヘルプ