Node.jsプロジェクト用GitLab CIパイプライン
インストール、lint、テスト、ビルドステージを含むNode.jsプロジェクト用の完全な.gitlab-ci.yml設定。npmキャッシュとカバレッジレポートのアーティファクト収集を含みます。
Language Pipelines
詳細な説明
GitLabでのNode.js CIパイプライン構築
構造化されたNode.jsパイプラインは通常4つのステージで構成されます:依存関係のインストール、lint、テスト、ビルド。この分離により、高速なフィードバックが得られます。lintの失敗で、高コストなテストやビルドステップの前にパイプラインが停止します。
パイプライン構造
stages:
- install
- lint
- test
- build
variables:
NODE_ENV: test
install_deps:
stage: install
image: node:20-alpine
script:
- npm ci
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
policy: push
artifacts:
paths:
- node_modules/
expire_in: 1 hour
lint:
stage: lint
image: node:20-alpine
script:
- npm run lint
needs:
- install_deps
test:
stage: test
image: node:20-alpine
script:
- npm test -- --coverage
needs:
- install_deps
artifacts:
paths:
- coverage/
expire_in: 30 days
build:
stage: build
image: node:20-alpine
script:
- npm run build
needs:
- install_deps
artifacts:
paths:
- dist/
expire_in: 1 week
主要な設計判断
npm ciとnpm installの違い: ciコマンドはpackage-lock.jsonから正確なバージョンをインストールし、高速で、インストール前にnode_modulesを削除します。再現可能なビルドを保証します。
node_modules/のキャッシュ: キャッシュキーに${CI_COMMIT_REF_SLUG}を使用することで、各ブランチが独自のキャッシュを取得します。
アーティファクトとキャッシュの違い: アーティファクトは同じパイプライン内のジョブ間でファイルを受け渡すために使用されます(信頼性、配信保証)。キャッシュは同じブランチのパイプライン実行間で使用されます(ベストエフォート)。
needsによるDAG: ステージ内のすべてのジョブを待つ代わりに、lint、test、buildはそれぞれinstall_depsのみを必要とします。
ユースケース
npm または yarn を使用するすべてのNode.jsプロジェクト(React、Next.js、Express、NestJS)にこの設定を使用できます。単一の依存関係インストールステップ後にlintとテストを並列実行し、高速なCIフィードバックを提供します。