ビルドに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
の助けになるはずだと思いましたが、それでもすべてを再ダウンロードしているようです。
コメントの答えは本質的に正しいですが。しかし、あなたのケースに対する具体的な答えは良いと思います。使用できるアプローチの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パイプラインのために結果をキャッシュします。また、ノードモジュールアーティファクトに有効期限を設定することもできます。