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

时间:2019-09-06 05:18:45

标签: continuous-integration gitlab-ci pipeline

我正在使用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时才可以重新缓存节点模块吗?

1 个答案:

答案 0 :(得分:1)

首先,将缓存置于全局级别。这样可以确保作业共享相同的缓存。

第二,您可以使用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文件夹不存在,则在nash安装之后执行bash之后仅会运行命令。
build:
  stage: build
  only:
    - develop
  script:
    - if [ ! -d "node_modules" ]; then npm install; fi