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レポートアーティファクトは動的に計算された変数を下流ジョブに渡します。
セキュリティのベストプラクティス
- シークレットをechoしない: マスクされた変数でもエラーメッセージに漏洩する可能性があります。
- 本番には保護変数を使用: 保護されたブランチでのみシークレットが利用可能であることを保証します。
- 定期的にシークレットをローテーション: スケジュールに従ってCI/CD変数を更新します。
ユースケース
変数管理はすべてのGitLab CIパイプラインの基礎です。非機密設定にはパイプラインレベル変数を、APIキー、トークン、認証情報などのシークレットにはGitLab UI変数を使用します。