キャッシュの依存性

Bitbucket Pipelines では、ビルド間で、外部ビルド依存関係やディレクトリ (サードパーティ ライブラリなど) をキャッシュすることができます。

キャッシュは素早いビルドや開発者フィードバックを実現するだけでなく、消費されるビルド時間も短縮できます。


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

Most builds start by running commands that download dependencies from the internet, which can take a lot of time for each build. As the majority of dependencies stay the same, rather than download them every time, we recommend downloading them once into a cache which you can reuse for later builds.

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

To enable caching, add a caches section to your step .

yourNode.js プロジェクトの node_modules ディレクトリを、pre-defined キャッシュを使用してキャッシュする方法の例:

bitbucket-pipelines.yml
pipelines:
  default:
    - step:
        caches:
          - node
        script:
          - npm install
          - npm test

The first time this pipeline runs it won't find the node cache and so the npm commands will download dependencies from the internet. For future builds, our service will have them cached, so loading them into your build will be quicker.

事前定義済キャッシュ

Pipelines provides pre-defined cache locations for commonly used language tools:

キャッシュ名 ステップ内での記載方法 ディレクトリ
Docker
caches:
- docker
n/a -  we create the cache from the layers generated by your build
composer
caches:
- composer
~/.composer/cache
dotnetcore
caches:
- dotnetcore
~/.nuget/packages
gradle
caches:
- gradle
~/.gradle/caches
ivy2
caches:
- ivy2
~/.ivy2/cache
Maven
caches:
- maven
~/.m2/repository
node
caches:
- node
node_modules
pip
caches:
- pip
~/.cache/pip
sbt
caches:
- sbt
- ivy2

~/.sbt

~/.ivy2/cache

Note that when you use the sbt tool you need to enable both the sbt and ivy2 caches.


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

If your build tool isn't listed above, you can still define a custom cache for your repository in your bitbucket-pipelines.yml file. First, in the definitions section of the yml, define the cache name and the directory to be cached, then you can refer to that cache in any step:

bitbucket-pipelines.yml
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 をインストールする必要があります。例:


$ bundle install --path vendor/bundle

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

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

bitbucket-pipelines.yml
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 

キャッシングのしくみ

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

Caches are saved on successful builds when the cache is empty. Only caches under 1GB once compressed are saved.

For the cache to compress to under 1GB, the size of the original images in the docker daemon must be < 2GB.
You can check the size by adding this command to the script in your bitbucket-pipelines.yml:

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

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

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

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

Any cache which is older than 1 week will be cleared automatically and repopulated during the next build. Additionally, caches can be cleared manually in the Bitbucket UI. Just choose Caches at the top right of the Pipelines page, then delete a cache from the list using the trash icon:


キャッシュすべき対象について

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

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

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

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

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

Note: We do not cache symlinks, so if your dependencies rely heavily on them caching may not be efficient.

Remember that caches are temporary, so your builds should be configured to work whether or not the cache is present.

最終更新日 2018 年 8 月 3 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.