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 cinpm installの違い: ciコマンドはpackage-lock.jsonから正確なバージョンをインストールし、高速で、インストール前にnode_modulesを削除します。再現可能なビルドを保証します。

node_modules/のキャッシュ: キャッシュキーに${CI_COMMIT_REF_SLUG}を使用することで、各ブランチが独自のキャッシュを取得します。

アーティファクトとキャッシュの違い: アーティファクトは同じパイプライン内のジョブ間でファイルを受け渡すために使用されます(信頼性、配信保証)。キャッシュは同じブランチのパイプライン実行間で使用されます(ベストエフォート)。

needsによるDAG: ステージ内のすべてのジョブを待つ代わりに、linttestbuildはそれぞれinstall_depsのみを必要とします。

ユースケース

npm または yarn を使用するすべてのNode.jsプロジェクト(React、Next.js、Express、NestJS)にこの設定を使用できます。単一の依存関係インストールステップ後にlintとテストを並列実行し、高速なCIフィードバックを提供します。

試してみる — GitLab CI Config Generator

フルツールを開く