Continuous integration Gitlab管道:如何仅在依赖关系更改时重新缓存节点模块?

Continuous integration Gitlab管道:如何仅在依赖关系更改时重新缓存节点模块?,continuous-integration,gitlab-ci,pipeline,Continuous Integration,Gitlab Ci,Pipeline,我正在使用cache对Gitlab管道进行性能调优 这是一个使用npm进行依赖关系管理的nodejs项目。我已使用以下设置将node\u modules文件夹放入后续阶段的缓存中: build: stage: build only: - develop script: - npm install cache: key: $CI_COMMIT_REF_SLUG paths: - node_modules/ 我可以为下次触发的管道设置缓

我正在使用
cache
对Gitlab管道进行性能调优

这是一个使用
npm
进行依赖关系管理的nodejs项目。我已使用以下设置将
node\u 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
更多信息:

其他提示:

  • 您可能希望检查
    package lock.json
    而不是
    package.json
  • 我建议您阅读,以确保不会遇到缓存可能无法恢复的常见问题
  • 除了简单地添加
    npm安装
    ,当从缓存中重新创建
    node\u modules
    文件夹时,您还可以跳过此步骤。如果node_modules文件夹不存在,那么在将bash添加到npm安装之后,只会运行该命令

当使用
npm-ci
时,默认情况下
npm-ci
将清除
node\u-modules
文件夹并重新开始。在使用
npm-ci
时,有没有办法实现高效缓存?
build:
  stage: build
  only:
    - develop
  script:
    - if [ ! -d "node_modules" ]; then npm install; fi