GitLab CI/CDパイプラインYAML(.gitlab-ci.yml)のフォーマット
GitLab CI/CDパイプラインYAMLファイルを正しいジョブ構造、ステージ定義、ルール、アーティファクト、キャッシュ設定でフォーマット・検証します。一般的な.gitlab-ci.ymlのエラーをキャッチします。
Real-World
詳細な説明
GitLab CI/CD YAMLフォーマット
GitLab CI/CDパイプラインはリポジトリルートの .gitlab-ci.yml ファイルで定義されます。このYAMLファイルはステージ、ジョブ、スクリプト、ルール、アーティファクト、キャッシュ — CI/CDワークフロー全体を記述します。
パイプライン構造
stages:
- build
- test
- deploy
variables:
NODE_VERSION: "20"
DOCKER_REGISTRY: registry.gitlab.com
default:
image: node:${NODE_VERSION}-alpine
cache:
key:
files:
- package-lock.json
paths:
- node_modules/
build:
stage: build
script:
- npm ci
- npm run build
artifacts:
paths:
- dist/
expire_in: 1 hour
test:unit:
stage: test
script:
- npm ci
- npm run test:unit
coverage: '/Lines\s*:\s*(\d+\.?\d*)%/'
test:e2e:
stage: test
image: cypress/included:latest
script:
- npm ci
- npm run test:e2e
artifacts:
when: on_failure
paths:
- cypress/screenshots/
deploy:production:
stage: deploy
script:
- ./deploy.sh
environment:
name: production
url: https://app.example.com
rules:
- if: $CI_COMMIT_BRANCH == "main"
when: manual
- when: never
GitLab固有のYAML機能
非表示ジョブ —
.で始まるジョブはテンプレートであり、実行されない:.test-template: script: - npm testextendsキーワード — テンプレートジョブから継承:
test:unit: extends: .test-template variables: TEST_SUITE: unitYAMLアンカー — GitLabは再利用のための標準YAMLアンカーをサポートし、
extendsと併用されることが多いInclude — パイプライン設定を複数ファイルに分割:
include: - local: .gitlab/ci/build.yml - local: .gitlab/ci/test.yml - template: Security/SAST.gitlab-ci.yml
よくあるフォーマットの問題
script:の下のインデント — スクリプト行はYAMLシーケンスで、各行に-プレフィックスが付く- 複数行スクリプト — 複雑なスクリプトには複数の
-エントリの代わりに|を使用 - rules vs only/except — モダンなGitLab CIは非推奨の
only:/except:の代わりにrules:を使用 - 変数展開 — YAML値内の
${VARIABLE}構文はフォーマッターによって理解される必要がある
バリデーション
GitLabはCI Lintツール(任意のプロジェクトの /ci/lint)を提供しており、YAML構造を検証します。フォーマットしたファイルをCI Lintに通すことで、プッシュ前に構造的なエラーをキャッチできます。
ユースケース
GitLab CI/CD YAMLフォーマットは複雑なパイプラインを管理するチームにとって不可欠です。適切にフォーマットされた.gitlab-ci.ymlにより、パイプラインフローの理解、変更のレビュー、障害のデバッグが容易になります。大規模なモノレポパイプライン(50以上のジョブ)を持つチームは特に、一貫したフォーマット、テンプレート整理、パイプラインを複数ファイルに分割するincludeの適切な使用の恩恵を受けます。