GitLab CI: How can I reuse installed npm packages between jobs?

gitlab-ci, gitlab-pages, gulp, node.js, npm-install

Solution

Though the answer in the comments is essentially correct. I think a specific answer for your case would be good though. One approach you could use is adding a third stage that would bear the load of installing node modules plus you could also cache them to speed up subsequent builds:

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

This solution will only perform the installation once and will cache the result for future ci pipelines, you may also place an expiry on the node modules artifacts.

Problem

I have a GitLab Pages site that uses Gulp for building. My .gitlab-ci.yml file looks similar to this: ``` 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/ ``` Before both the `build` and `pages` jobs, the `npm install` commands are executed (once before each job). Since I have quite a few packages, this usually takes a while. Is there a way to only do the installs once across the entire build? I thought that's what `cache` was supposed to help with, but it still seems like it still redownloads everything.

Original source

Related problems