首页 > 解决方案 > Gitlab CI/CD 的不同类型的缓存

问题描述

我有一个管道,其中我有后端和前端的 node_modules。我正在尝试在整个管道中缓存这些文件(我有三个不同的阶段)。这样做有什么区别:

stages:
  - test
  - build
  - deploy

unit:
  stage: test
  image: node:12
  cache:
    key: ${CI_COMMIT_REF_SLUG}
    paths:
      - Backend/node_modules
      - Frontend/node_modules
...

stages:
  - test
  - build
  - deploy

cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - Backend/node_modules
    - Frontend/node_modules

unit:
  stage: test
  image: node:12
....

第二个是否只是为所有阶段提供缓存,而第一个只是为测试阶段提供缓存?

标签: continuous-integrationgitlabgitlab-cigitlab-ci-runner

解决方案


你的问题的答案

第二个是否只是为所有阶段提供缓存,而第一个只是为测试阶段提供缓存?

大部分是肯定的。

基本上,第二个只是为所有作业提供缓存,而第一个只是为unit作业提供缓存(因为同一阶段可能有几个其他作业,不受此设置的影响)。

请参阅相应的文档(要添加书签!):

https://docs.gitlab.com/ee/ci/yaml/#cache

如果cache在作业范围之外定义,则意味着它是全局设置的,所有作业都将使用该定义。

这种语义在 GitLab CI YAML 配置中被广泛应用:例如,如果您将image:定义放在根级别(在作业范围之外),它也将在全局范围内应用(但也可以在无论如何,给定的工作)。


推荐阅读