Gitlab 管道:如何仅在依赖项发生变化时才重新缓存节点模块?
Gitlab pipeline: How to recache node modules only when dependency changed?
我正在使用 cache
对 Gitlab 管道进行性能调优。
这是一个使用 npm
进行依赖管理的 nodejs 项目。我已使用以下设置将 node_modules
文件夹放入缓存以供后续阶段使用:
build:
stage: build
only:
- develop
script:
- npm install
cache:
key: $CI_COMMIT_REF_SLUG
paths:
- node_modules/
我可以让缓存可供下次触发的管道使用吗?或者可以在单个管道中访问缓存?
如果我可以在多个管道中访问它,是否可以仅在我们更改 package.json 时才重新缓存节点模块?
首先,将缓存放在全局级别。这将确保作业共享相同的缓存。
其次,您可以使用 GitLab 12.5 引入的 cache:key:files
仅在 package.json 更改时重新创建缓存。
cache:
key:
files:
- package.json
paths:
- node_modules/
build:
stage: build
only:
- develop
script:
- npm install
更多信息:
https://docs.gitlab.com/ee/ci/yaml/#cachekeyfiles
其他提示:
- 您可能想查看
package-lock.json
而不是 package.json
。
- 我建议阅读 cache mismatch chapter in the documentation 以确保您不会 运行 陷入可能无法恢复缓存的常见问题。
- 除了简单地添加
npm install
,您还可以在从缓存重新创建 node_modules
文件夹时跳过此步骤。如果 node_modules 文件夹不存在,则 bash 添加到 npm install 后只会 运行 命令。
build:
stage: build
only:
- develop
script:
- if [ ! -d "node_modules" ]; then npm install; fi
我正在使用 cache
对 Gitlab 管道进行性能调优。
这是一个使用 npm
进行依赖管理的 nodejs 项目。我已使用以下设置将 node_modules
文件夹放入缓存以供后续阶段使用:
build:
stage: build
only:
- develop
script:
- npm install
cache:
key: $CI_COMMIT_REF_SLUG
paths:
- node_modules/
我可以让缓存可供下次触发的管道使用吗?或者可以在单个管道中访问缓存?
如果我可以在多个管道中访问它,是否可以仅在我们更改 package.json 时才重新缓存节点模块?
首先,将缓存放在全局级别。这将确保作业共享相同的缓存。
其次,您可以使用 GitLab 12.5 引入的 cache:key:files
仅在 package.json 更改时重新创建缓存。
cache:
key:
files:
- package.json
paths:
- node_modules/
build:
stage: build
only:
- develop
script:
- npm install
更多信息:
https://docs.gitlab.com/ee/ci/yaml/#cachekeyfiles
其他提示:
- 您可能想查看
package-lock.json
而不是package.json
。 - 我建议阅读 cache mismatch chapter in the documentation 以确保您不会 运行 陷入可能无法恢复缓存的常见问题。
- 除了简单地添加
npm install
,您还可以在从缓存重新创建node_modules
文件夹时跳过此步骤。如果 node_modules 文件夹不存在,则 bash 添加到 npm install 后只会 运行 命令。
build:
stage: build
only:
- develop
script:
- if [ ! -d "node_modules" ]; then npm install; fi