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.