GitLab CI/CD (.gitlab-ci.yml) パイプラインジェネレーター
GitLab CI/CD 自動化ハブ

GitLab CI/CD (.gitlab-ci.yml) パイプラインジェネレーター

Node.js、Python、Go、Rust、Kaniko コンテナワークフローに対応した本番仕様の .gitlab-ci.yml パイプライン構築と最適化のための技術リファレンス。

GitLab CI対応
プリセット:
Node.js環境設定
# ============================================================================
# GitLab CI/CD Pipeline Configuration (.gitlab-ci.yml)
# Synthesized via ToolsAA Flagship Generator (100% Client-Side Engine)
# ============================================================================

include:
  - template: Security/SAST.gitlab-ci.yml
  - template: Security/Secret-Detection.gitlab-ci.yml

stages:
  - lint
  - test
  - security
  - build
  - deploy

default:
  image: node:20-alpine
  interruptible: true
  retry:
    max: 2
    when:
      - runner_system_failure
      - stuck_or_timeout_failure
  tags:
    - docker
    - saas-linux-medium-amd64

variables:
  FF_USE_FASTZIP: "true"
  ARTIFACT_COMPRESSION_LEVEL: "fast"
  CACHE_COMPRESSION_LEVEL: "fast"
  SAST_EXCLUDED_PATHS: "test, tests, spec, docs"
  NEXT_TELEMETRY_DISABLED: "1"
  CI: "true"

cache:
  key:
    files:
      - pnpm-lock.yaml
  policy: pull-push
  paths:
    - .pnpm-store
    - node_modules/.cache

lint-and-format:
  stage: lint
  timeout: 25m
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_COMMIT_TAG
  before_script:
    - npm install -g pnpm
    - pnpm config set store-dir .pnpm-store
    - pnpm install --frozen-lockfile
  script:
    - pnpm run lint
    - pnpm run typecheck

unit-tests:
  stage: test
  timeout: 25m
  parallel:
    matrix:
      - NODE_VERSION: ["18", "20", "22"]
  image: node:${NODE_VERSION}-alpine
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_COMMIT_TAG
  before_script:
    - npm install -g pnpm
    - pnpm config set store-dir .pnpm-store
    - pnpm install --frozen-lockfile
  script:
    - pnpm test -- --coverage
  coverage: '/Lines\s*:\s*(\d+\.\d+\%)/'
  artifacts:
    reports:
      junit: junit.xml
      coverage_report:
        coverage_format: cobertura
        path: coverage/cobertura-coverage.xml
    expire_in: 3 days
    when: always

compile-and-package:
  stage: build
  timeout: 25m
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_COMMIT_TAG
  before_script:
    - npm install -g pnpm
    - pnpm install --frozen-lockfile
  script:
    - pnpm run build
  artifacts:
    paths:
      - dist/
      - .next/
      - coverage/
    expire_in: 1 week
    when: on_success

deploy-service:
  stage: deploy
  environment:
    name: production
    url: https://toolsaa.com
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      when: manual
  script:
    - echo "Deploying production bundle..."
パイプライン効率
95%+ Fastzip Enabled
セキュリティスコア
100 / 100SAST Active
推定高速化率
3.5x FasterLockfile Cache

100% クライアントサイド処理

ブラウザ内メモリ上でGitLab CI/CD設定を完全合成。リポジトリ構造や機密情報が外部サーバーへ送信されることは一切ありません。

GitLab CIネイティブ設計

マルチステージDAG実行、Kanikoルートレスビルド、ロックファイル連動キャッシュ、公式セキュリティテンプレートに完全準拠。

DevSecOps & 高速最適化

SAST・シークレット検知の自動統合、Fastzip圧縮による高速化、不要ジョブの即時キャンセル(interruptible)を標準装備。

技術リファレンス&アーキテクチャガイド

GitLab CI パイプライン生成リファレンス — リファレンスガイド

Node.js、Python、Go、Rust、Kaniko コンテナワークフローに対応した本番仕様の .gitlab-ci.yml パイプライン構築と最適化のための技術リファレンス。

主要パラメータ&設定項目

ecosystem'node' | 'python' | 'go' | 'rust' | 'docker' | 'pages' | 'generic'

対象のプログラミング言語および実行環境を指定し、ベースコンテナイメージ、CLIツール、標準ビルドスクリプトのテンプレートを切り替えます。

初期値: 'node'
nodePkgManager'pnpm' | 'npm' | 'yarn' | 'bun'

Node.js のパッケージマネージャーを選択し、ロックファイル解決、グローバルストアキャッシュパス、不変インストールフラグを決定します。

初期値: 'pnpm'
cacheKeyType'branch' | 'job' | 'lockfile'

キャッシュキーの生成方式を決定し、コミットブランチ名、ジョブ名、またはロックファイルのチェックサムに基づいたキャッシュ無効化を実現します。

初期値: 'lockfile'
cachePolicy'pull-push' | 'pull' | 'push'

Runner のキャッシュ送受信ポリシーを設定します。'pull' はダウンロードのみ行い、'pull-push' はジョブ完了時に最新状態をアップロードします。

初期値: 'pull-push'
dockerEngine'kaniko' | 'dind'

コンテナイメージのビルドエンジンを選択します。非特権で動作する Google Kaniko または特権モードを要する Docker-in-Docker(dind)を指定できます。

初期値: 'kaniko'
interruptibleboolean

同一ブランチやマージリクエストに新しいコミットがプッシュされた際、実行中の古いパイプラインを自動キャンセルして Runner リソースを節約します。

初期値: true

プロの活用テクニック&推奨設定

rulesによる柔軟な実行制御

非推奨の 'only/except' 構文をモダンな 'rules:' 配列に移行し、'$CI_COMMIT_BRANCH' による条件判定を記述します。これにより、マージリクエスト時、手動承認ゲート(when: manual)、ファイル変更検知(changes:)を正確に制御できます。

pull設定でキャッシュ高速化

依存関係キャッシュに 'key: files: [pnpm-lock.yaml]' を指定して自動無効化を設定します。パッケージ追加を行わないテストやリントジョブでは 'policy: pull' を指定することで、ジョブ終了時の不要なアップロード時間を完全に省けます。

needsを活用したDAG高速化

ステージ順の同期待機を回避するため、独立したジョブに 'needs: [job_name]' を設定します。先行ジョブが成功した瞬間に同ステージの他ジョブを待たずに次ステージが即時開始され、有向非巡回グラフ(DAG)による大幅な時間短縮が可能です。

Kaniko採用の安全ビルド

Docker-in-Docker(dind)の代わりに Google Kaniko(executor:debug)を採用します。Kaniko はユーザー空間でコンテナイメージの構築とレジストリ送信を完結させるため、Runner の危険な特権モード(privileged = true)を不要にします。

よくあるトラブルと解決策

ジョブが保留状態(pending)のまま "This job is stuck because you don't have any active runners online with any of these tags" と表示される

[Settings] > [CI/CD] > [Runners] を確認し、Runner に付与されているタグとパイプライン設定の runnerTags を一致させてください。タグを指定しないジョブを実行する場合は、Runner 設定で「Run untagged jobs(タグなしジョブの実行)」を有効化します。

構文検証エラー "jobs:job_name config should implement a script: or a trigger: keyword" が発生する

実行対象となるすべてのジョブには 'script:' 配列または 'trigger:' の定義が必須です。共通設定用の基底テンプレートを定義する場合は、ジョブ名の先頭にドット(例:'.base_job:')を付与して隠しジョブとして宣言し、'extends:' で継承してください。

Docker デーモン接続失敗 "Cannot connect to the Docker daemon at unix:///var/run/docker.sock" が発生する

Docker-in-Docker(dind)を利用する場合、GitLab Runner の config.toml で 'privileged = true' が有効になっていることを確認してください。また環境変数に 'DOCKER_HOST: tcp://docker:2375' および 'DOCKER_TLS_CERTDIR: ""' を指定して非TLS通信を許可します。

よくある質問 (FAQ)

GitLab CI の cache と artifacts はどのような基準で使い分けるべきですか?▼

cache はビルド高速化のための依存関係ライブラリ(node_modules 等)を再利用する一時領域であり、欠落してもビルド自体は完走する必要があります。一方 artifacts はビルド成果物(dist/)やテストレポート(junit.xml)など、後続ステージや GitLab UI に確実に受け渡す不変の出力ファイルです。

パイプラインで needs キーワードを適用するとどのような実行効率化が得られますか?▼

標準のステージ制では前ステージの全ジョブが完了するまで次ステージへ進めません。'needs: [job_name]' を指定して有向非巡回グラフ(DAG)を形成すると、前提となる特定ジョブが成功した瞬間に後続ジョブが即時起動し、並列処理の待機時間を大幅に短縮できます。

マージリクエスト作成時にブランチ Push パイプラインとの二重実行を防ぐには?▼

ルート直下に 'workflow:rules:' を定義し、マージリクエストイベント($CI_PIPELINE_SOURCE == "merge_request_event")と、オープンな MR が存在しないデフォルトブランチへの Push のみを許可します。これにより、同一コミットに対するパイプラインの重複起動を完全に防止できます。

Kubernetes Runner 上で Docker-in-Docker より Kaniko が推奨される理由は?▼

Docker-in-Docker(dind)はコンテナにホストへの root 特権(privileged モード)を要求するため、クラスタの侵害リスクが高まります。Google Kaniko は Docker デーモンやソケットを一切必要とせず、非特権のユーザー空間のみでイメージ生成とリモートプッシュを安全に完結できます。

関連するおすすめ開発ツール

すべてのツール →
Linux Supervisord (supervisord.conf) プログラム設定ジェネレーター開発ツール

自動再起動、プロセス並行数、ログ出力リダイレクト、環境変数、非特権ユーザー設定を含むSupervisordプログラム設定ブロックをブラウザ上で即座に生成します。

ツールを開く→
HAProxy ロードバランサー設定ジェネレーター開発ツール

HAProxyロードバランサー向けの本番環境対応設定ファイル生成および構文バリデーションツール。

ツールを開く→
Kubernetes Helm Chart (Chart.yaml & values.yaml) 生成ツール開発ツール

標準的なKubernetes Helm v3のChart.yaml、values.yaml、およびService、Ingress、リソース制限を備えたデプロイメントテンプレートを生成します。

ツールを開く→
マルチステージ Dockerfile ジェネレーター (Node, Go, Python, Rust)開発ツール

Node.js、Golang、Python、Rust、Java向けの高セキュアで軽量なマルチステージ Dockerfile を生成。非rootユーザー設計とBuildKitキャッシュ最適化を完全網羅。

ツールを開く→
SQL DDL から Kysely TypeScript 型定義生成ツール開発ツール

PostgreSQL、MySQL、SQLiteのSQL DDLスキーマを解析し、完全な型安全性を備えたKysely向けTypeScript型定義とインターフェースを生成するための開発者向けリファレンス。

ツールを開く→
SQL DDL から MikroORM TypeScript エンティティ変換ジェネレーター開発ツール

SQL CREATE TABLE 定義を解析し、@Entity、@PrimaryKey、@Property、@Index、およびリレーション装飾子を備えた MikroORM エンティティクラスに変換します。

ツールを開く→