创建 job 的缓存和缓存策略
上面我们使用的是全局的缓存,我们也可以给某个 job 设置缓存,也可以设置缓存的策略 push 或者 pull
stages: - build1 - build2 - build3 - test1 - test2 - deploy build1: stage: build1 tags: - build before_script: - ls - ls app cache: key: build1 # 为缓存提供唯一的标识键 paths: - app/a.txt # 将 app 下的 a.txt 文件创建一个缓存 - app/b.txt # 将 app 下的 b.txt 文件创建一个缓存 script: - ls - id - echo 'test123' >> app/a.txt # 创建了个文件,模拟编译产生的文件 - echo 'test456' >> app/b.txt # 创建了个文件,模拟编译产生的文件 - ls app build2: stage: build2 tags: - build before_script: - ls - ls app cache: key: build2 # 为缓存提供唯一的标识键 paths: - app/c.txt # 将 app 下的 c.txt 文件创建一个缓存 script: - ls - id - echo 'test123' >> app/c.txt # 创建了个文件,模拟编译产生的文件 - ls app build3: stage: build3 tags: - build before_script: - ls - ls app cache: # key: build3 # 没有设置 key,将使用 default paths: - app/e.txt # 将 app 下的 c.txt 文件创建一个缓存 script: - ls - id - echo 'test666' >> app/e.txt # 创建了个文件,模拟编译产生的文件 - ls app test1: stage: test1 tags: - build before_script: - ls - ls app script: - echo "run test" - echo 'test' >> app/c.txt # 创建了个文件 - ls app # 在查看 app 下的内容 cache: policy: pull # 缓存的策略是仅在作业开始时下载缓存,但在作业完成时从不上传更改 key: build1 paths: # 使用了 key,必须要有 paths,下载 a.txt 文件 - app/a.txt - app/c.txt # 缓存 build1 里没有 c.txt 文件,所以不会下载。由于策略原因,c.txt 文件也不会上传到缓存里 test2: stage: test2 tags: - build before_script: - ls - ls app script: - echo "run test" - echo 'test' >> app/d.txt - ls app # 在查看 app 下的内容 cache: policy: push # 缓存的策略是仅在作业完成时上传缓存,但在作业开始时从不下载缓存 key: build2 paths: - app/d.txt # 由于策略设置的是 push,所以会上传 - app/c.txt # 由于设置的策略是 push,所以不会下载 build2 里的 c.txt 文件,上传缓存时会给出警告 deploy: stage: deploy tags: - build before_script: - ls - ls app script: - echo "run deploy" - ls app # 在查看 app 下的内容 retry: max: 2 when: - script_failure
运行上面的流水线,查看日志,先来查看 build1
的日志
build1 日志
可以看到,重置缓存的时候是去 build1-protected 下面去下载缓存的
build2 日志
可以看到,重置缓存的时候是去 build2-protected 下面去下载缓存的
build3 日志
进入 runner 里查看下缓存
test1 日志
test2 日志
deploy 日志