具有多个路径的GitLab CI缓存似乎跳过了一个路径

时间:2018-09-05 13:24:34

标签: caching gitlab gitlab-ci gitlab-ci-runner

我配置了一个gitlab CI,在安装阶段我有2个作业将依赖项拉入缓存的位置。然后处于不同阶段的作业尝试访问这些位置,但是似乎只有一个。

我已经根据Gitlab提供的python示例构建了CI,可以在[此处找到]。1

我的.gitlab-ci.yml文件如下所示。

---

cache:
  paths:
  - foo-1
  - foo-2

stages:
- install
- test

install_foo-1_dependencies:
  stage: install
  script:
  - pull foo-1 dependencies

install_foo-2_dependencies:
  stage: install
  script:
  - pull foo-2 dependencies
  tags:
  - ansible-f5-runner

test_dependencies:
  stage: test
  script: 
  - ls foo-1
  - ls foo-2

install_foo-1_dependencies和install_foo-2_dependencies的输出清楚地显示了正在创建的缓存。但是,当您查看test_dependencies的输出时,似乎仅创建了foo-1缓存。

install_foo-1_dependencies输出:

Fetching changes...
Removing foo-1/
Checking cache for default-5...
Successfully extracted cache
Creating cache default-5...
....
foo-1: found 1000 matching files                     
Created cache

install_foo-2_dependencies输出:

Fetching changes...
Removing installed-roles/
Checking cache for default-5...
Successfully extracted cache
Creating cache default-5...  
....                 
foo-2: found 1000 matching files        
Created cache

test_dependencies的输出

Fetching changes...
Removing foo-1/
Checking cache for default-5...
....
Successfully extracted cache
$ ls foo-1
files
$ ls foo-2
ls: cannot access foo-2: No such file or directory

1 个答案:

答案 0 :(得分:0)

您需要确保在此管道的每个阶段使用相同的运行器。来自docs

  

提示::为管道使用相同的Runner是最简单,最有效的方法,可在一个阶段或管道中缓存文件,并以有保证的方式将该缓存传递给后续阶段或管道。

从您的.gitlab-ci.yml文件中可以看出,您确定每个阶段都由同一个跑步者接手。再次从这些docs中,确保使用一个跑步者,您应该使用以下一种或多种:

  • 标记跑步者,并在共享其缓存的作业上使用标记。
  • 使用仅适用于特定项目的粘性运行器。
  • 使用适合您工作流程的键(例如,每个分支上的不同缓存)。