gitlab: 利用前端 lock 文件作为缓存的 key
Using lock file as Gitlab CI/CD cache key
简介
Gitlab CI/CD 提供了一种机制来缓存项目依赖项,以便可以在 pipelines 和作业之间重用和共享它。使用缓存可以减少花费在每个作业上的时间。可以通过在文件中使用cache:
关键字来启用缓存。.gitlab-ci.yml
它还允许为cache:key
每个缓存提供指令。可以使用不同的策略来生成缓存键。
缓存key
例如:使用预定义的变量,例如$CI_COMMIT_REF_SLUG
为每个分支创建单独的缓存。
但是使用 npm 的项目有其用于管理依赖关系的锁定文件,该文件可用于创建缓存键。仅当更改锁定文件时才会更新缓存。通过添加cache:key
指令,将密钥保存为锁定文件的 SHA 校验和,因此密钥仅在锁定文件更新时才会更改。即使您的项目中有许多分支,除非更新包或添加新包,它们都可以共享相同的缓存。
使用文件<yarn对应使用 yarn.lock>
这是使用 package-lock.json 作为缓存键的示例,它会在您安装任何软件包时自动生成。
.gitlab-ci.yml 使用 npm
stages:
- ci
.cache: &cache
cache:
key:
files:
- yarn.lock
- package-lock.json
paths:
- node_modules
lint:
stage: ci
image: node:12.14.1
<<: *cache
script:
- npm install
- npm run lint
test:
stage: ci
image: node:12.14.1
<<: *cache
script:
- npm install
- npm run test
.gitlab-ci.yml 使用 yarn
- 注意: cache:key:files config has too many items (maximum is 2)
stages:
- ci
.cache: &cache
cache:
key:
files:
- yarn.lock
paths:
- node_modules
lint:
stage: ci
image: node:12.14.1
<<: *cache
script:
- yarn
- yarn lint
test:
stage: ci
image: node:12.14.1
<<: *cache
script:
- yarn
- yarn test
policy
- pull-push: 读写
- pull: 读
参考
https://rakshanshetty.in/using-lock-file-as-gitlab-cache-key/
https://stackoverflow.com/questions/67811761/gitlab-cache-not-uploading-due-to-policy