Gitlab CI:npm不喜欢缓存的node_modules

时间:2019-03-26 14:37:16

标签: npm gitlab npm-install gitlab-ci

Internet上充满了关于不缓存Gitlab的抱怨,但就我而言,我认为Gitlab CI确实正确缓存了。关键是,npm似乎仍然会重新安装所有内容。

cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - vendor/
    - bootstrap/
    - node_modules/

build-dependencies:
  image: ...
  stage: build
  script:
  - cp .env.gitlab-testing .env
  - composer install --no-progress --no-interaction
  - php artisan key:generate
  - npm install
  - npm run prod
  - npm run prod
  artifacts:
    paths:
    - vendor/
    - bootstrap/
    - node_modules/
    - .env
    - public/mix-manifest.json
  tags:
  - docker

这是我的gitlab-ci.yml文件(以及相关部分)。尽管使用了缓存的作曲家依赖关系,但没有使用node_modules。我什至添加了所有内容来缓存工件,以免感到绝望。

3 个答案:

答案 0 :(得分:1)

实际上应该可以,缓存是全局设置的,您的键指向当前分支${CI_COMMIT_REF_SLUG} ...

这是我的构建,它似乎在阶段之间缓存了node_modules。

image: node:latest

cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
  - node_modules/
  - .next/

stages:
  - install
  - test
  - build
  - deploy

install_dependencies:
  stage: install
  script:
    - npm install

test:
  stage: test
  script:
    - npm run test

build:
  stage: build
  script:
    - npm run build

答案 1 :(得分:1)

我遇到了同样的问题,对我来说,问题出在缓存设置上,默认情况下,缓存不保留未版本控制的git文件,并且由于我们不在git中存储node_modules,因此根本不缓存npm文件。 所以我要做的就是像下面这样插入一行“ untracked:true”

  cache:
  untracked: true
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - vendor/
    - bootstrap/
    - node_modules/

现在npm速度更快,尽管它仍然需要检查是否发生了变化,对我来说这仍然需要花费几分钟,因此我考虑进行npm安装,但是它大大加快了速度已经。

答案 2 :(得分:0)

默认缓存路径为~/.npm

要设置npm缓存目录:

npm config set cache <path> --global

有关更多信息,请参见here