web-dev-qa-db-ja.com

GitLab CI:インストールされたnpmパッケージをジョブ間で再利用するにはどうすればよいですか?

ビルドにGulpを使用するGitLabPagesサイトがあります。私の.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/

buildジョブとpagesジョブの両方の前に、npm installコマンドが実行されます(各ジョブの前に1回)。私はかなりの数のパッケージを持っているので、これは通常時間がかかります。

ビルド全体で一度だけインストールを実行する方法はありますか?

それがcacheの助けになるはずだと思いましたが、それでもすべてを再ダウンロードしているようです。

12
user341554

コメントの答えは本質的に正しいですが。しかし、あなたのケースに対する具体的な答えは良いと思います。使用できるアプローチの1つは、ノードモジュールのインストールの負荷に耐える第3ステージを追加することです。さらに、ノードモジュールをキャッシュして、後続のビルドを高速化することもできます。

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

このソリューションは、インストールを1回だけ実行し、将来のciパイプラインのために結果をキャッシュします。また、ノードモジュールアーティファクトに有効期限を設定することもできます。

4
Clive Makamara