在gitlab CICD中使用具有多个映像的缓存



我正在制作一个使用两个不同映像的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’。

可能有两种情况

  1. 正在使用相同的runner来运行所有作业。在这种情况下,到指定缓存的方式应该可以正常工作。

  2. 不同的跑步者被用来跑不同的作业。因此,假设build作业与runner 1一起运行,而quality作业与runner 2一起运行,因此缓存将仅存在于runner 1中。

为了利用case 2中的缓存,您必须使用分布式缓存。然后runner 1将运行构建作业,它将把缓存推送到s3,runner 2将在质量作业期间使用缓存,然后可以使用它。

最新更新