我有一个使用GitLab CI构建,测试和部署的Vue Web应用程序。
GitLab CI具有“ Cache”功能,可以缓存作业的特定产品,从而可以避免在同一管道中继续运行作业,而可以使用缓存的产品。
我想通过缓存node_modules
目录来提高工作流的性能,以便可以在管道之间共享它。
GitLab Docs suggests使用${CI_COMMIT_REF_SLUG}
作为缓存键来实现。但是,这意味着“按分支缓存”,我想对此进行改进。
我想要一个缓存“ per package.json”。也就是说,仅当package.json
的内容发生更改时,缓存密钥才会更改,npm install
将运行。
我当时正在考虑将package.json
文件内容的哈希值用作缓存键。使用GitLab CI可以做到吗?如果可以,怎么办?
答案 0 :(得分:0)
为此,请使用带有静态缓存名称的only:changes
参数。
例如:
install:
image: node:latest
script:
- npm install
cache:
untracked: true
key: npm #static name, can use any branch, any commit, etc..
paths:
- node_modules
only: #Only execute this job when theres a change in package.json
changes:
- package.json
如果您需要阅读以下内容以正确设置跑步者中的缓存,请执行以下操作: https://docs.gitlab.com/runner/configuration/autoscale.html#distributed-runners-caching https://docs.gitlab.com/ee/ci/caching/
答案 1 :(得分:0)
从Gilab Runner v12.5开始,这已经成为可能
cache:
key:
files:
- Gemfile.lock
- package.json
paths:
- vendor/ruby
- node_modules
这意味着高速缓存key
将是根据更改了给定文件的最新提交(最多两个,如果列出了两个文件)计算出的SHA校验和。只要这些文件之一发生更改,就会计算新的缓存键并创建新的缓存。将来任何使用与Gemfile.lock
相同的package.json
和cache:key:files
运行的作业都将使用新的缓存,而不是重建依赖关系。