18

我有一个使用 Gulp 进行构建的 GitLab Pages 站点。我的 .gitlab-ci.yml 文件与此类似:

image: node:latest

before_script:
  - npm install gulp-cli -g
  - npm install gulp [...and a whole bunch of packages] --save-dev

build:
  stage: build
  script:
  - gulp buildsite
  artifacts:
    paths:
    - public

pages:
  stage: deploy
  script:
  - gulp
  artifacts:
    paths:
    - public

cache:
  paths:
  - node_modules/

buildpages作业之前,npm install执行命令(在每个作业之前执行一次)。由于我有很多包,这通常需要一段时间。

有没有办法在整个构建中只安装一次?

我认为这cache是应该提供帮助的,但它似乎仍然会重新下载所有内容。

4

2 回答 2

9

尽管评论中的答案基本上是正确的。我认为针对您的案例的具体答案会很好。您可以使用的一种方法是添加第三个阶段,该阶段将承担安装节点模块的负载,此外您还可以缓存它们以加速后续构建:

image: node:latest

stages:
  - prep
  - build
  - deploy  

before_script:
  - npm install gulp-cli -g  

prep:
  stage: prep
  script:
  - npm install gulp [...and a whole bunch of packages] --save-dev
  artifacts:
   paths:
   - node_modules 
  cache:
   paths:
   - node_modules

build:
  stage: build
  script:
  - gulp buildsite
  artifacts:
    paths:
    - public

pages:
  stage: deploy
  script:
  - gulp
  artifacts:
    paths:
    - public

此解决方案将只执行一次安装,并将缓存结果以供将来的 ci 管道使用,您也可以在节点模块工件上设置过期时间。

于 2017-10-11T06:50:54.983 回答
1

您需要设置cache: untracked: true为真正缓存 Git 未跟踪的文件。

cache:
  untracked: true
  paths:
      - node_modules/
于 2019-08-06T08:51:19.310 回答