GitLab CIでジョブごとにキャッシュを指定する。
複数バージョンのRustでCIを実行するとき、pathの指定だけだと毎回ビルドが発生して、キャッシュが無意味ばかりか有害になってしまっていたのでその対策のメモ。
cache:keyを指定すれば良いのだが、下のような環境だとグローバルに指定してもjob1とjob2の間でキャッシュが使い回されてしまう。実際にジョブの出力を見ると、この2つのジョブではキャッシュのアップロード先が全く同じものになっている。
code: .gitlab-ci.yml
cache:
key: ${CI_JOB_NAME}
# jobの中身は簡略化している
job1:
cache:
paths:
- target/wasm32-wasi/
script:
- rustc --version # 1.48になるとする
- cargo test --target wasm32-wasi
job2:
cache:
paths:
- target/wasm32-wasi/
script:
- rustc --version # 1.43になるとする
- cargo test --target wasm32-wasi
各ジョブに直接書くとちゃんとジョブごとにキャッシュしてくれるようになった。確認するとキャッシュのアップロード先にジョブ名が入っているはず。
code: .gitlab-ci.yml
# jobの中身は簡略化している
job1:
cache:
key: ${CI_JOB_NAME}
paths:
- target/wasm32-wasi/
script:
- rustc --version # 1.48になるとする
- cargo test --target wasm32-wasi
job2:
cache:
key: ${CI_JOB_NAME}
paths:
- target/wasm32-wasi/
script:
- rustc --version # 1.43になるとする
- cargo test --target wasm32-wasi