CodeBuildでのS3キャッシュで保存しているファイルのタイムスタンプが、CodeBuild前回実行時の日時を保存されているかどうかを実際に動かして確認してみました。
前回の記事の続きです。
わかったこと
- S3キャッシュから復元されるファイルは、前回ビルド実行時のファイルタイムスタンプを維持している
- 実際にはキャッシュ対象をtar.gzで固めたものがS3に保存されている
- ただしtar.gzの中のディレクトリ構成は独自フォーマットになっており、tar.gzから手動で復元するのは困難
ついでにわかったこと(はまったポイント)
buildspec.yml
でのキャッシュさせたいパスの書き方に注意です。ディレクトリの中をサブディレクトリも含めて丸ごとS3にキャッシュさせるには以下のように **/*
という記述が必要です。
cache:
paths:
- 'var/**/*'
S3キャッシュの設定方法
1.
CodeBuildのマネジメントコンソールでCache type: S3を選択し、S3バケットを指定します。S3バケットのプレフィックスも指定可能です。プレフィックスを指定しないとファイルがバケット直下にできます。S3にはファイルが1つに固められます。
2.
buildspec.yml
にキャッシュしてほしいファイルやディレクトリを指定します。
version: 0.2
phases:
pre_build:
commands:
- ...
build:
commands:
- ...
post_build:
commands:
- ...
cache:
paths:
- 'var/**/*'
キャッシュしてほしいパスの書き方に注意です。ディレクトリの中をサブディレクトリも含めて丸ごとS3にキャッシュさせるにはディレクトリ名の後ろにワイルドカードを並べて var/**/*
という記述が必要です。ディレクトリ直下のファイルだけでよく、サブディレクトリの中はキャッシュ不要の場合は var/*
と書きます。ディレクトリ名の var
だけだとなにもキャッシュしてくれません。
やってみたこと
前回と同様に buildspec.yml
に find . -ls
を記載するほか、 touch
コマンドの実行もファイルパスをいろいろ変えながらCodeCommitを複数回実行してみました。
buildspec.yml
のサンプルです。途中で touch
コマンドがありますが、ここでtouchするファイルのディレクトリやファイル名を毎回変えてみて試しました。
version: 0.2
phases:
pre_build:
commands:
- echo begin
build:
commands:
- find . -ls
- mkdir -p var
- find . -ls
- touch var/test.txt
- find . -ls
post_build:
commands:
- echo end
cache:
paths:
- 'var/**/*'