有没有一种方法可以使GitLab缓存被使用而不被写入?

时间:2020-06-13 23:01:49

标签: continuous-integration gitlab-ci-runner continuous-delivery

我有一个gitlab作业,可以下载一堆依赖项并将它们填充到缓存中(如有必要),然后还有一堆使用该缓存的作业。我注意到,在使用作业结束时,即使他们没有进行任何更改,他们也花了很多时间来创建新的缓存。

是否可以让它们仅充当消费者?只读?

cache:
  paths:
    - assets/
configure:
  stage: .pre
  script:
    - conda env update --prefix ./assets/env/base -f ./environment.yml; 
    - source activate ./assets/env/base 
    - bash ./download.sh
parse1:
  stage: build
  script:
    - source activate ./assets/env/base;
    - ./build.sh -b test -s 2
  artifacts:
    paths:
      - build
parse2:
  stage: build
  script:
    - source activate ./assets/env/base;
    - ./build.sh -b test -s 2
  artifacts:
    paths:
      - build

2 个答案:

答案 0 :(得分:0)

TLDR。没有cache元素覆盖path

您可能还必须在全局缓存配置中添加一个关键元素。实际上,我从来没有没有关键要素。

请参阅缓存文档here

答案 1 :(得分:0)

非常详细的.gitlab-ci.yml文档中,是对称为policycache设置的引用。 GitLab缓存具有push(又名write)和pull(又名read)的概念。默认情况下,它设置为pull-push(开头是read,结尾是write)。

如果您知道该作业不会更改缓存的文件,则可以通过在作业规范中设置policy: pull来跳过上载步骤。通常,这会在较早的阶段与普通的缓存作业结合在一起,以确保不时更新缓存:

.gitlab-ci.yml > cache:policy

几乎可以描述这种情况:作业configure更新了缓存,而parse作业没有更改缓存。

在使用作业中,添加:

cache:
  paths:
    - assets/
  policy: pull

为清楚起见,在全局设置中明确显示该内容可能不会受到损害:

cache:
  paths:
    - assets/
  policy: pull-push