パスベーストリガリングによるモノレポ用GitLab CI

パスベースのジョブトリガリングによるモノレポプロジェクト用GitLab CI設定。rules:changesを使用して関連ファイルが変更された場合のみジョブを実行。

Pipeline Architecture

詳細な説明

モノレポパイプライン設定

モノレポでは、すべてのコミットですべてのジョブを実行するとCIリソースが無駄になります。GitLab CIのrules:changesキーワードにより、特定のパスが変更された場合のみジョブをトリガーできます。

パイプライン設定

build_frontend:
  stage: build
  image: node:20-alpine
  script:
    - cd frontend && npm ci && npm run build
  rules:
    - changes:
        - frontend/**/*
        - shared/**/*

build_backend:
  stage: build
  image: golang:1.22-alpine
  script:
    - cd backend && go build -o app ./cmd/server
  rules:
    - changes:
        - backend/**/*
        - shared/**/*

主要な概念

rules:changes: コミットでglobパターンに一致するファイルが変更された場合のみジョブが実行されます。モノレポのパイプライン時間を劇的に短縮します。

共有依存関係: フロントエンドとバックエンドの両方のジョブがshared/**/*の変更でトリガーされ、共有ライブラリの変更がすべての利用者でテストされます。

needsのoptional: true: 必要なジョブがスキップされた場合、optional: trueフラグにより下流のジョブは正常に実行されます。

ユースケース

複数のサービス、フロントエンド/バックエンドの分離、共有ライブラリを含むモノレポプロジェクトに必須です。1つのコンポーネントのみが変更された場合、CI時間を数分から数秒に短縮します。

試してみる — GitLab CI Config Generator

フルツールを開く