我正在制作一个使用两个不同映像的gitlab CI/CD管道。
其中之一需要使用npm
安装某些软件包。为了避免多次安装,我添加了一些缓存。
让我们看看这个例子:
stages:
- build
- quality
cache:
paths:
- node_modules/
build-one:
image: node:latest
stage: build
script:
- npm install <some package>
build-two:
image: foo_image:latest
stage: build
script:
- some cmd
quality:
image: node:latest
stage: quality
script:
- <some cmd using the previously installed package>
有两个不同的docker images
这一事实迫使我在作业定义中指定它。因此,根据我的测试,实际上没有使用缓存,quality
作业执行的命令将失败,因为没有安装package
。
这个问题有解决办法吗?
非常感谢!Kev’。
可能有两种情况
-
正在使用相同的runner来运行所有作业。在这种情况下,到指定缓存的方式应该可以正常工作。
-
不同的跑步者被用来跑不同的作业。因此,假设
build
作业与runner 1
一起运行,而quality
作业与runner 2
一起运行,因此缓存将仅存在于runner 1
中。
为了利用case 2
中的缓存,您必须使用分布式缓存。然后runner 1
将运行构建作业,它将把缓存推送到s3,runner 2
将在质量作业期间使用缓存,然后可以使用它。