CI/CD 変数

CI/CD 変数を使用して、Auto DevOps ドメインを設定したり、カスタム Helm チャートを提供したり、アプリケーションをスケールしたりします。

ビルドとデプロイの変数

これらの変数を使用して、ビルドをカスタマイズし、デプロイします。

CI/CD 変数説明
ADDITIONAL_HOSTSIngress ホストに追加される、カンマ区切りの完全修飾ドメイン名。
<ENVIRONMENT>_ADDITIONAL_HOSTS特定の環境では、Ingress ホストに追加される完全修飾ドメイン名をカンマ区切りで指定します。これはADDITIONAL_HOSTS よりも優先されます。
AUTO_BUILD_IMAGE_VERSION build ジョブに使用するイメージのバージョンをカスタマイズします。バージョンの一覧を参照してください。
AUTO_DEPLOY_IMAGE_VERSIONKubernetesデプロイジョブに使用するイメージバージョンをカスタマイズします。バージョン一覧を参照してください。
AUTO_DEVOPS_ATOMIC_RELEASEGitLab 13.0 の時点で、Auto DevOps はデフォルトで Helm デプロイに--atomic を使用します。の使用を無効にするには、この変数をfalse に設定します。--atomic
AUTO_DEVOPS_BUILD_IMAGE_CNB_ENABLEDAuto Build で Cloud Native Buildpacks の代わりに Herokuish を使用するには、この変数をfalse に設定します。詳細はこちら。
AUTO_DEVOPS_BUILD_IMAGE_CNB_BUILDERCloud Native Buildpacksでビルドするときに使用するビルダー。デフォルトのビルダーはheroku/buildpacks:18 です。詳細
AUTO_DEVOPS_BUILD_IMAGE_EXTRA_ARGS docker build コマンドに渡す追加引数。引用符を使っても単語の分割は防げません。詳細はこちら。
AUTO_DEVOPS_BUILD_IMAGE_FORWARDED_CI_VARIABLESビルド環境(buildpack builder またはdocker build )に転送するCI/CD 変数名のカンマ区切りリスト
AUTO_DEVOPS_BUILD_IMAGE_CNB_PORTGitLab 15.0以降では、生成されたDockerイメージによって公開されるポート。ポートを公開しないようにするには、false に設定します。デフォルトは5000
AUTO_DEVOPS_CHARTアプリのデプロイに使用するHelm Chart。GitLab が提供するものがデフォルトです。
AUTO_DEVOPS_CHART_REPOSITORYHelm Chartのリポジトリ。デフォルトはhttps://charts.gitlab.io
AUTO_DEVOPS_CHART_REPOSITORY_NAMEHelm リポジトリの名前を設定します。デフォルトはgitlab です。
AUTO_DEVOPS_CHART_REPOSITORY_USERNAMEHelm リポジトリに接続するためのユーザー名を設定します。デフォルトは認証情報なしです。AUTO_DEVOPS_CHART_REPOSITORY_PASSWORD も設定します。
AUTO_DEVOPS_CHART_REPOSITORY_PASSWORDHelm リポジトリに接続するためのパスワードを設定します。デフォルトは認証情報なしです。AUTO_DEVOPS_CHART_REPOSITORY_USERNAME も設定します。
AUTO_DEVOPS_CHART_REPOSITORY_PASS_CREDENTIALSGitLab 14.2 以降では、空でない値を設定することで、チャートのアーティファクトがリポジトリとは異なるホストにある場合に、Helm リポジトリの認証情報をチャートサーバーに転送できるようになります。
AUTO_DEVOPS_COMMON_NAMEGitLab 15.5からは、TLS証明書に使用する共通名をカスタマイズするために、有効なドメイン名に設定します。デフォルトはle-$CI_PROJECT_ID.$KUBE_INGRESS_BASE_DOMAIN です。 Ingress でこの代替ホストを設定しない場合はfalse に設定します。
AUTO_DEVOPS_DEPLOY_DEBUGGitLab 13.1から、この変数が存在する場合、Helmはデバッグログを出力します。
AUTO_DEVOPS_ALLOW_TO_FORCE_DEPLOY_V<N> auto-deploy-imagev1.0.0以降、この変数が存在する場合、新しいメジャーバージョンのChartが強制的にデプロイされます。詳しくは、警告を無視してデプロイを続行するを参照してください。
BUILDPACK_URL完全なBuildpack URL。PackまたはHerokuishがサポートするURLを指す必要があります。
CANARY_ENABLED カナリア環境のデプロイポリシーを定義するために使用します。
BUILDPACK_VOLUMES マウントする Buildpack ボリュームを 1 つ以上指定します。リストの区切りにはパイプ| を使用します。
CANARY_PRODUCTION_REPLICAS本番環境のCanary デプロイ用にデプロイする Canary レプリカの数。CANARY_REPLICAS より優先されます。デフォルトは 1 です。
CANARY_REPLICAS デプロイするカナリア・レプリカの数。デフォルトは 1 です。
CI_APPLICATION_REPOSITORYビルドまたはデプロイされるコンテナ・イメージのリポジトリ、$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG 。詳細については、カスタム・コンテナ・イメージを参照してください。
CI_APPLICATION_TAGビルドまたはデプロイされるコンテナイメージのタグ、$CI_APPLICATION_REPOSITORY:$CI_APPLICATION_TAG 。詳細については、カスタムコンテナイメージを参照してください。
DAST_AUTO_DEPLOY_IMAGE_VERSIONデフォルトブランチでの DAST デプロイに使用するイメージのバージョンをカスタマイズします。通常はAUTO_DEPLOY_IMAGE_VERSION と同じにします。バージョンの一覧を参照してください。
DOCKERFILE_PATHGitLab 13.2から、ビルドステージのデフォルトのDockerfileパスを上書きできるようになりました。
HELM_RELEASE_NAME helm リリース名を上書きできるようになりました。複数のプロジェクトを一つのネームスペースにデプロイする際に、ユニークなリリース名を割り当てることができます。
HELM_UPGRADE_VALUES_FILE helm upgrade 値ファイルをオーバーライドできるようにします。デフォルトは.gitlab/auto-deploy-values.yaml です。
HELM_UPGRADE_EXTRA_ARGSアプリケーションのデプロイ時にhelm upgrade コマンドで追加オプションを許可します。引用符を使用すると、単語の分割を防ぐことができません。
INCREMENTAL_ROLLOUT_MODE存在する場合、本番環境でアプリケーションのインクリメンタルロールアウトを有効にするために使用できます。手動デプロイジョブの場合はmanual に設定し、自動ロールアウトデプロイの場合はtimed に設定し、それぞれ 5 分遅延します。
K8S_SECRET_*プレフィックスがK8S_SECRET_ である変数はすべて、デプロイされたアプリケーションの環境変数として Auto DevOps によって利用可能になります。
KUBE_CONTEXTGitLab 14.5からは、KUBECONFIG から使用するコンテキストを選択するために使用できます。KUBE_CONTEXT が空白の場合、KUBECONFIG (もしあれば) のデフォルトコンテキストが使用されます。Kubernetes用エージェントで使用する場合は、コンテキストを選択する必要があります。
KUBE_INGRESS_BASE_DOMAINクラスターごとにドメインを設定するために使用できます。詳細については、クラスターのドメインを参照してください。
KUBE_NAMESPACEデプロイに使用する名前空間。証明書ベースのクラスターを使用する場合は、この値を直接上書きしないでください。
KUBECONFIGデプロイに使用する kubeconfig。GitLabが提供する値よりもユーザーが提供する値が優先されます。
PRODUCTION_REPLICAS本番環境にデプロイするレプリカの数。REPLICAS より優先され、デフォルトは 1 です。ゼロダウンタイムのアップグレードのために、2以上に設定します。
REPLICASデプロイするレプリカの数。デフォルトは1です。replicaCount変更する代わりに、この変数を変更してください。
ROLLOUT_RESOURCE_TYPEカスタムHelmチャートを使用する場合に、デプロイされるリソースの種類を指定できます。デフォルト値はdeployment です。
ROLLOUT_STATUS_DISABLEDすべてのリソースタイプに対応していないため、ロールアウトステータスのチェックを無効にするために使用します (例:cronjob)。
STAGING_ENABLED ステージング環境と本番環境のデプロイポリシーを定義するために使用します。
TRACE任意の値に設定すると、Helmコマンドは冗長出力を生成します。この設定を使用して、Auto DevOpsデプロイの問題を診断できます。

データベース変数

caution
GitLab 16.0からPOSTGRES_ENABLED はデフォルトでは設定されなくなりました。

PostgreSQLデータベースとCI/CDをインテグレーションするには、これらの変数を使用してください。

CI/CD 変数説明
DB_INITIALIZEアプリケーションの PostgreSQL データベースを初期化するために実行するコマンドを指定します。アプリケーションポッドの内部で実行されます。
DB_MIGRATEアプリケーションの PostgreSQL データベースをマイグレーションするために実行するコマンドを指定します。アプリケーション・ポッド内で実行します。
POSTGRES_ENABLEDPostgreSQL が有効かどうか。PostgreSQL の自動デプロイを有効にするには、true に設定します。
POSTGRES_USERPostgreSQLユーザー。デフォルトはuser です。 カスタムのユーザ名を使用するように設定します。
POSTGRES_PASSWORDPostgreSQLのパスワード。デフォルトはtesting-password です。 カスタムのパスワードを使用するように設定します。
POSTGRES_DBPostgreSQL データベース名。デフォルトは$CI_ENVIRONMENT_SLUG です。 カスタムのデータベース名を使用するように設定します。
POSTGRES_VERSION postgres 使用する Docker イメージ のタグ。GitLab 13.0でのテストとデプロイのデフォルトは9.6.16 です(以前は9.6.2)。AUTO_DEVOPS_POSTGRES_CHANNEL1に設定されている場合、デプロイはデフォルトのバージョン9.6.2を使用します。
POSTGRES_HELM_UPGRADE_VALUES_FILEGitLab 13.8以降で、auto-deploy-image v2を使用する場合、この変数によってPostgreSQL用のhelm upgrade 値ファイルを上書きすることができます。デフォルトは.gitlab/auto-deploy-postgres-values.yaml です。
POSTGRES_HELM_UPGRADE_EXTRA_ARGSGitLab 13.8以降、およびauto-deploy-image v2を使用している場合、この変数によってアプリケーションのデプロイ時にhelm upgrade コマンドで追加のPostgreSQLオプションを指定することができます。引用符を使っても単語の分割は防げません。
POSTGRES_CHART_REPOSITORYPostgreSQL Chartの検索に使用するHelm Chartリポジトリです。デフォルトはhttps://raw.githubusercontent.com/bitnami/charts/eb5f9a9513d987b519f0ecd732e7031241c50328/bitnami です。
POSTGRES_CHART_VERSIONPostgreSQL チャートで使用する Helm Chart のバージョン。デフォルトは8.2.1 です。

ジョブを無効にする変数

CI/CDジョブを無効にするにはこれらの変数を使います。

ジョブ名CI/CD 変数GitLab バージョン説明
.fuzz_baseCOVFUZZ_DISABLEDGitLab 13.2より .fuzz_base がどのように独自のジョブの機能を提供するかについては、こちらをご覧ください。値が"true" の場合、ジョブは作成されません。
apifuzzer_fuzzAPI_FUZZING_DISABLEDGitLab 13.3より値が"true" の場合、ジョブは作成されません。
buildBUILD_DISABLED 変数が存在する場合、ジョブは作成されません。
build_artifactBUILD_DISABLED 変数が存在する場合、ジョブは作成されません。
brakeman-sastSAST_DISABLED 値が"true" の場合、ジョブは作成されません。
canaryCANARY_ENABLED 変数が存在する場合、この手動ジョブは作成されます。
code_intelligenceCODE_INTELLIGENCE_DISABLEDGitLab 13.6 より変数が存在する場合、ジョブは作成されません。
code_qualityCODE_QUALITY_DISABLED 値が"true" の場合、ジョブは作成されません。
container_scanningCONTAINER_SCANNING_DISABLED 値が"true" の場合、ジョブは作成されません。
dastDAST_DISABLED 値が"true" の場合、ジョブは作成されません。
dast_environment_deploy DAST_DISABLED_FOR_DEFAULT_BRANCH またはDAST_DISABLED GitLab 12.4 より値が"true" の場合、ジョブは作成されません。
dependency_scanningDEPENDENCY_SCANNING_DISABLED 値が"true" の場合、ジョブは作成されません。
flawfinder-sastSAST_DISABLED 値が"true" の場合、ジョブは作成されません。
gemnasium-dependency_scanningDEPENDENCY_SCANNING_DISABLED 値が"true" の場合、ジョブは作成されません。
gemnasium-maven-dependency_scanningDEPENDENCY_SCANNING_DISABLED 値が"true" の場合、ジョブは作成されません。
gemnasium-python-dependency_scanningDEPENDENCY_SCANNING_DISABLED 値が"true" の場合、ジョブは作成されません。
kubesec-sastSAST_DISABLED 値が"true" の場合、ジョブは作成されません。
license_managementLICENSE_MANAGEMENT_DISABLEDGitLab 12.7 以前変数が存在する場合、ジョブは作成されません。GitLab 12.8から廃止されたジョブ。
license_scanningLICENSE_MANAGEMENT_DISABLEDGitLab 12.8から値が"true" の場合、ジョブは作成されません。
load_performanceLOAD_PERFORMANCE_DISABLEDGitLab 13.2より変数が存在する場合、ジョブは作成されません。
nodejs-scan-sastSAST_DISABLED 値が"true" の場合、ジョブは作成されません。
performancePERFORMANCE_DISABLEDGitLab 13.12 以前ブラウザのパフォーマンス。変数が存在する場合、ジョブは作成されません。browser_performance に置き換えられました。
browser_performanceBROWSER_PERFORMANCE_DISABLEDGitLab 14.0 より。ブラウザのパフォーマンス。変数が存在する場合、ジョブは作成されません。performance を置き換えます。
phpcs-security-audit-sastSAST_DISABLED 値が"true" の場合、ジョブは作成されません。
pmd-apex-sastSAST_DISABLED 値が"true" の場合、ジョブは作成されません。
reviewREVIEW_DISABLED 変数が存在する場合、ジョブは作成されません。
review:stopREVIEW_DISABLED 手動ジョブ。変数が存在する場合、ジョブは作成されません。
secret_detectionSECRET_DETECTION_DISABLEDGitLab 13.1 より値が"true" の場合、ジョブは作成されません。
secret_detection_default_branchSECRET_DETECTION_DISABLEDGitLab 13.2より値が"true" の場合、ジョブは作成されません。
semgrep-sastSAST_DISABLED 値が"true" の場合、ジョブは作成されません。
sobelow-sastSAST_DISABLED 値が"true" の場合、ジョブは作成されません。
stop_dast_environment DAST_DISABLED_FOR_DEFAULT_BRANCH またはDAST_DISABLED GitLab 12.4 より値が"true" の場合、ジョブは作成されません。
spotbugs-sastSAST_DISABLED 値が"true" の場合、ジョブは作成されません。
testTEST_DISABLED 変数が存在する場合、ジョブは作成されません。
stagingSTAGING_ENABLED 変数が存在する場合、ジョブは作成されます。
stop_reviewREVIEW_DISABLED 変数が存在する場合、ジョブは作成されません。

アプリケーション秘密変数の設定

デプロイされたアプリケーションの中には、シークレット変数へのアクセスが必要なものがあります。Auto DevOps はK8S_SECRET_ で始まる CI/CD 変数を検出し、環境変数としてデプロイされたアプリケーションで利用できるようにします。

前提条件

  • 変数値は1行であること。

シークレット変数を設定するには:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. Settings > CI/CDを選択します。
  3. 変数]を展開します。
  4. K8S_SECRET_という接頭辞を持つ CI/CD 変数を作成します。例えば、K8S_SECRET_RAILS_MASTER_KEY という変数を作成します。
  5. 手動で新しいパイプラインを作成するか、GitLabにコード変更をプッシュすることで、Auto DevOpsパイプラインを実行します。

Kubernetesのシークレット

Auto DevOpsパイプラインは、アプリケーションのシークレット変数を使用してKubernetesのシークレットを入力します。このシークレットは環境ごとに一意です。アプリケーションをデプロイするとき、シークレットはアプリケーションを実行するコンテナの環境変数としてロードされます。例えば、K8S_SECRET_RAILS_MASTER_KEYというシークレットを作成した場合、Kubernetesのシークレットは次のようになります:

$ kubectl get secret production-secret -n minimal-ruby-app-54 -o yaml

apiVersion: v1
data:
  RAILS_MASTER_KEY: MTIzNC10ZXN0
kind: Secret
metadata:
  creationTimestamp: 2018-12-20T01:48:26Z
  name: production-secret
  namespace: minimal-ruby-app-54
  resourceVersion: "429422"
  selfLink: /api/v1/namespaces/minimal-ruby-app-54/secrets/production-secret
  uid: 57ac2bfd-03f9-11e9-b812-42010a9400e4
type: Opaque

アプリケーションのシークレットを更新

Kubernetesポッドでは環境変数は一般的に不変です。アプリケーションシークレットを更新してから手動で新しいパイプラインを作成すると、実行中のアプリケーションは更新されたシークレットを受信しません。

アプリケーションシークレットを更新するには、次のいずれかを実行します:

  • GitLab にコード更新をプッシュして、Kubernetes デプロイにポッドを再作成させます。
  • 実行中のポッドを手動で削除して、Kubernetesが更新されたシークレットで新しいポッドを作成するようにします。

Auto DevOpsスクリプト環境の制限により、複数行の値を持つ変数はサポートされていません。

レプリカ変数の設定

デプロイをスケールしたい場合は、レプリカ変数を追加します:

  1. プロジェクトのCI/CD変数としてレプリカ変数を追加します。
  2. アプリケーションをスケールするには、再デプロイします。

    caution
    Kubernetesを直接使用してアプリケーションをスケールしないでください。Helmが変更を検出しない可能性があり、その後のAuto DevOpsによるデプロイで変更が元に戻される可能性があります。

カスタムレプリカ変数

カスタムレプリカ変数は<TRACK>_<ENV>_REPLICAS という形式で作成することができます:

  • <TRACK> は、track Helm Chartアプリ定義で設定したKubernetesラベルの track全角値です。設定されていないtrack 場合は track<TRACK>カスタム変数から<TRACK> 省略 <TRACK>します。
  • <ENV>.gitlab-ci.ymlで設定したデプロイジョブの全角環境名です。

例えば、環境がqa 、トラックがfoo の場合、FOO_QA_REPLICAS という環境変数を作成します:

QA testing:
  stage: deploy
  environment:
    name: qa
  script:
    - deploy foo

トラックfoo はアプリケーションのHelmチャートで定義されていなければなりません。例えば

replicaCount: 1
image:
  repository: gitlab.example.com/group/project
  tag: stable
  pullPolicy: Always
  secrets:
    - name: gitlab-registry
application:
  track: foo
  tier: web
service:
  enabled: true
  name: web
  type: ClusterIP
  url: http://my.host.com/
  externalPort: 5000
  internalPort: 5000

ステージ環境と本番環境へのデプロイポリシー

Auto DevOpsは通常継続的デプロイを使用し、新しいパイプラインがデフォルトブランチで実行されるたびにproduction 環境に自動的にプッシュします。手動で本番環境にデプロイするには、STAGING_ENABLED CI/CD変数を使います。

STAGING_ENABLEDを設定すると、GitLab は自動的にアプリケーションをstaging 環境にデプロイします。本番環境へのデプロイの準備ができたら、GitLab はproduction_manual ジョブを作成します。

プロジェクト設定で手動デプロイを有効にすることもできます。

カナリア環境へのデプロイポリシー

本番環境に変更をデプロイする前に、カナリア環境を使用することができます。

CANARY_ENABLED を設定すると、GitLabは2つの手動ジョブを作成します:

  • canary - アプリケーションをカナリア環境にデプロイします。
  • production_manual - アプリケーションを本番環境にデプロイします。

本番環境への増分ロールアウト

インクリメンタルロールアウトを使用して、少数のポッドから始めてアプリケーションを継続的にデプロイします。ポッドの数は手動で増やすことができます。

プロジェクト設定で手動デプロイを有効にするか、INCREMENTAL_ROLLOUT_MODEmanual に設定します。

INCREMENTAL_ROLLOUT_MODEmanual に設定すると、GitLabは4つの手動ジョブを作成します:

  1. rollout 10%
  2. rollout 25%
  3. rollout 50%
  4. rollout 100%

このパーセンテージはREPLICAS CI/CD 変数に基づいており、デプロイに使用するポッドの数を定義します。例えば、値が1010% rollout ジョブを実行した場合、アプリケーションは1つのポッドのみにデプロイされます。

ロールアウトジョブは任意の順序で実行できます。スケールダウンするには、より低いパーセンテージのジョブを再実行します。

rollout 100% ジョブを実行した後はスケールダウンできないため、デプロイをロールバックする必要があります。

増分ロールアウトの設定例

INCREMENTAL_ROLLOUT_MODESTAGING_ENABLED

Staging and rollout disabled

INCREMENTAL_ROLLOUT_MODE なし、STAGING_ENABLED あり:

Staging enabled

INCREMENTAL_ROLLOUT_MODEmanual に設定し、STAGING_ENABLED を設定しない場合:

Rollout enabled

INCREMENTAL_ROLLOUT_MODEmanual に設定し、STAGING_ENABLED を設定した場合:

Rollout and staging enabled

本番環境への時間差ロールアウト

時限インクリメンタルロールアウトを使用して、わずかなポッドからアプリケーションを継続的にデプロイします。

プロジェクト設定で時限インクリメンタルデプロイを有効にするか、INCREMENTAL_ROLLOUT_MODE CI/CD 変数をtimed に設定します。

INCREMENTAL_ROLLOUT_MODEtimed に設定すると、GitLab は4つのジョブを作成します:

  1. timed rollout 10%
  2. timed rollout 25%
  3. timed rollout 50%
  4. timed rollout 100%

ジョブの間には5分間の遅延があります。