本文是《GitLabCI实践》教程部分内容,点击上面图片报名学习!
cache 缓存
用来指定需要在job之间缓存的文件或目录。只能使用该项目工作空间内的路径。不要使用缓存在阶段之间传递工件,因为缓存主要是存储编译项目所需的运行时依赖项。
如果在job范围之外定义了cache
,则意味着它是全局设置,所有job都将使用该定义。如果未全局定义或未按job定义则禁用该功能。
cache:paths
使用paths指令选择要缓存的文件或目录,路径是相对于项目目录,不能直接链接到项目目录之外。$CI_PROJECT_DIR 项目目录。在job build中定义缓存,将会缓存target目录下的所有.jar文件。
build:
script: test
cache:
paths:
- target/*.jar
当在全局定义了cache:paths会被job中覆盖。以下实例将缓存binaries目录。
cache:
paths:
- my/files
build:
script: echo "hello"
cache:
key: build
paths:
- target/
由于缓存是在job之间共享的,如果不同的job使用不同的路径就出现了缓存覆盖的问题。如何让不同的job缓存不同的cache呢?设置不同的cache:key
。
cache:key 缓存标记
为缓存做个标记,可以配置job、分支为key来实现分支、作业特定的缓存。为不同 job 定义了不同的 cache:key
时, 会为每个 job 分配一个独立的 cache。cache:key变量可以使用任何预定义变量,默认
default ,从GitLab 9.0开始,默认情况下所有内容都在管道和作业之间共享。
按照分支设置缓存
cache:
key: ${CI_COMMIT_REF_SLUG}
files:文件发生变化自动重新生成缓存(files最多指定两个文件),提交的时候检查指定的文件。
根据指定的文件生成密钥计算SHA校验和,如果文件未改变值为default。
cache:
key:
files:
- Gemfile.lock
- package.json
paths:
- vendor/ruby
- node_modules
prefix: 允许给定prefix的值与指定文件生成的秘钥组合。
在这里定义了全局的cache,如果文件发生变化则值为 rspec-xxx111111111222222 ,未发生变化为rspec-defa