GitLab CIでの変数とシークレットの管理

GitLabでのCI/CD変数とシークレット管理のベストプラクティス。マスク変数、保護変数、グループレベルの継承、ファイル型変数をカバー。

Configuration

詳細な説明

GitLab CIの変数とシークレット

GitLab CIは変数を定義する複数の方法を提供し、それぞれ異なるスコープとセキュリティ特性を持ちます。

変数定義レベル

# パイプラインレベル変数
variables:
  APP_NAME: my-app
  NODE_ENV: production

build:
  # ジョブレベル変数(パイプラインレベルを上書き)
  variables:
    NODE_ENV: test
  script:
    - echo $NODE_ENV  # "test"を出力

定義済み変数

GitLabは100以上の定義済み変数を提供します:$CI_COMMIT_SHA$CI_COMMIT_BRANCH$CI_REGISTRY$CI_PIPELINE_IDなど。

動的変数

build:
  script:
    - export VERSION=$(cat package.json | jq -r .version)
    - echo "VERSION=$VERSION" >> build.env
  artifacts:
    reports:
      dotenv: build.env

dotenvレポートアーティファクトは動的に計算された変数を下流ジョブに渡します。

セキュリティのベストプラクティス

  1. シークレットをechoしない: マスクされた変数でもエラーメッセージに漏洩する可能性があります。
  2. 本番には保護変数を使用: 保護されたブランチでのみシークレットが利用可能であることを保証します。
  3. 定期的にシークレットをローテーション: スケジュールに従ってCI/CD変数を更新します。

ユースケース

変数管理はすべてのGitLab CIパイプラインの基礎です。非機密設定にはパイプラインレベル変数を、APIキー、トークン、認証情報などのシークレットにはGitLab UI変数を使用します。

試してみる — GitLab CI Config Generator

フルツールを開く