运行器缓存不能用于在作业阶段之间传递工件。它们适用于一个用例,例如,您需要安装 npm 依赖项,然后将 npm_modules 目录传递到另一个阶段。该定义可能如下所示:
stages:
- build
- deploy
Build NPM Dependencies:
stage: build
script:
- npm install # puts downloaded dependencies in ./npm_modules
artifacts:
paths:
- npm_modules
expire_in: 2 hours
Deploy App:
stage: deploy
script:
- ls # npm_modules is here
- ./my-deploy-script.sh
工件在创建后的所有后续阶段中都会被每个作业下载。因此,如果我们在构建和部署之间有一个“打包”阶段,npm 依赖项将在每个步骤中下载。我们可以使用dependencies 关键字来控制它:
...
Deploy App:
stage: deploy
dependencies: [“Build NPM Dependencies”]
...
这也可以是[],以防止作业中出现所有伪影。
您需要使用artifacts 在其他阶段传递您的.pub-cache 目录。那么缓存是干什么用的呢?在我们的 NPM 依赖项示例中,无论我们的需求是否发生变化,我们都必须为每个管道安装依赖项。您可以仅在某些文件已更改或未更改的情况下运行作业,但我们所需的工件将不存在。这就是缓存发挥作用的地方:
stages:
- build
- deploy
Build NPM Dependencies:
stage: build
script:
- npm install # puts downloaded dependencies in ./npm_modules
artifacts:
paths:
- npm_modules
expire_in: 2 hours
cache:
paths:
- .pub-cache
key: ${CI_COMMIT_REF_NAME}_pub-cache
Deploy App:
stage: deploy
script:
- ls # npm_modules is here
- ./my-deploy-script.sh
现在,当此作业运行时,它将检查包含分支或标记名称的$CI_COMMIT_REF_NAME 变量,以查看该键是否存在缓存。如果没有,它将运行该作业。如果是,它将下载缓存的项目并像刚刚构建一样使用它。这一切都由 key 关键字控制,因此您必须根据需要对其进行调整。
您可以在此处找到有关缓存和工件之间区别的信息:https://docs.gitlab.com/ee/ci/caching/#cache-vs-artifacts
您可以在此处找到有关使用缓存的详细信息:https://docs.gitlab.com/ee/ci/yaml/#cache
关于工件的详细信息在这里:https://docs.gitlab.com/ee/ci/yaml/#artifacts