- ビルドとデプロイの変数
- データベース変数
- ジョブを無効にする変数
- アプリケーション秘密変数の設定
- アプリケーションのシークレットを更新
- レプリカ変数の設定
- ステージ環境と本番環境へのデプロイポリシー
- カナリア環境へのデプロイポリシー
- 本番環境への増分ロールアウト
- 本番環境への時間差ロールアウト
CI/CD 変数
CI/CD 変数を使用して、Auto DevOps ドメインを設定したり、カスタム Helm チャートを提供したり、アプリケーションをスケールしたりします。
ビルドとデプロイの変数
これらの変数を使用して、ビルドをカスタマイズし、デプロイします。
CI/CD 変数 | 説明 |
---|---|
ADDITIONAL_HOSTS | Ingress ホストに追加される、カンマ区切りの完全修飾ドメイン名。 |
<ENVIRONMENT>_ADDITIONAL_HOSTS | 特定の環境では、Ingress ホストに追加される完全修飾ドメイン名をカンマ区切りで指定します。これはADDITIONAL_HOSTS よりも優先されます。 |
AUTO_BUILD_IMAGE_VERSION |
build ジョブに使用するイメージのバージョンをカスタマイズします。バージョンの一覧を参照してください。 |
AUTO_DEPLOY_IMAGE_VERSION | Kubernetesデプロイジョブに使用するイメージバージョンをカスタマイズします。バージョン一覧を参照してください。 |
AUTO_DEVOPS_ATOMIC_RELEASE | GitLab 13.0 の時点で、Auto DevOps はデフォルトで Helm デプロイに--atomic を使用します。の使用を無効にするには、この変数をfalse に設定します。--atomic
|
AUTO_DEVOPS_BUILD_IMAGE_CNB_ENABLED | Auto Build で Cloud Native Buildpacks の代わりに Herokuish を使用するには、この変数をfalse に設定します。詳細はこちら。 |
AUTO_DEVOPS_BUILD_IMAGE_CNB_BUILDER | Cloud 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_PORT | GitLab 15.0以降では、生成されたDockerイメージによって公開されるポート。ポートを公開しないようにするには、false に設定します。デフォルトは5000 。 |
AUTO_DEVOPS_CHART | アプリのデプロイに使用するHelm Chart。GitLab が提供するものがデフォルトです。 |
AUTO_DEVOPS_CHART_REPOSITORY | Helm Chartのリポジトリ。デフォルトはhttps://charts.gitlab.io 。 |
AUTO_DEVOPS_CHART_REPOSITORY_NAME | Helm リポジトリの名前を設定します。デフォルトはgitlab です。 |
AUTO_DEVOPS_CHART_REPOSITORY_USERNAME | Helm リポジトリに接続するためのユーザー名を設定します。デフォルトは認証情報なしです。AUTO_DEVOPS_CHART_REPOSITORY_PASSWORD も設定します。 |
AUTO_DEVOPS_CHART_REPOSITORY_PASSWORD | Helm リポジトリに接続するためのパスワードを設定します。デフォルトは認証情報なしです。AUTO_DEVOPS_CHART_REPOSITORY_USERNAME も設定します。 |
AUTO_DEVOPS_CHART_REPOSITORY_PASS_CREDENTIALS | GitLab 14.2 以降では、空でない値を設定することで、チャートのアーティファクトがリポジトリとは異なるホストにある場合に、Helm リポジトリの認証情報をチャートサーバーに転送できるようになります。 |
AUTO_DEVOPS_COMMON_NAME | GitLab 15.5からは、TLS証明書に使用する共通名をカスタマイズするために、有効なドメイン名に設定します。デフォルトはle-$CI_PROJECT_ID.$KUBE_INGRESS_BASE_DOMAIN です。 Ingress でこの代替ホストを設定しない場合はfalse に設定します。 |
AUTO_DEVOPS_DEPLOY_DEBUG | GitLab 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_PATH | GitLab 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_CONTEXT | GitLab 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デプロイの問題を診断できます。 |
データベース変数
POSTGRES_ENABLED
はデフォルトでは設定されなくなりました。PostgreSQLデータベースとCI/CDをインテグレーションするには、これらの変数を使用してください。
CI/CD 変数 | 説明 |
---|---|
DB_INITIALIZE | アプリケーションの PostgreSQL データベースを初期化するために実行するコマンドを指定します。アプリケーションポッドの内部で実行されます。 |
DB_MIGRATE | アプリケーションの PostgreSQL データベースをマイグレーションするために実行するコマンドを指定します。アプリケーション・ポッド内で実行します。 |
POSTGRES_ENABLED | PostgreSQL が有効かどうか。PostgreSQL の自動デプロイを有効にするには、true に設定します。 |
POSTGRES_USER | PostgreSQLユーザー。デフォルトはuser です。 カスタムのユーザ名を使用するように設定します。 |
POSTGRES_PASSWORD | PostgreSQLのパスワード。デフォルトはtesting-password です。 カスタムのパスワードを使用するように設定します。 |
POSTGRES_DB | PostgreSQL データベース名。デフォルトは$CI_ENVIRONMENT_SLUG です。 カスタムのデータベース名を使用するように設定します。 |
POSTGRES_VERSION |
postgres 使用する Docker イメージ のタグ。GitLab 13.0でのテストとデプロイのデフォルトは9.6.16 です(以前は9.6.2 )。AUTO_DEVOPS_POSTGRES_CHANNEL が1 に設定されている場合、デプロイはデフォルトのバージョン9.6.2 を使用します。 |
POSTGRES_HELM_UPGRADE_VALUES_FILE | GitLab 13.8以降で、auto-deploy-image v2を使用する場合、この変数によってPostgreSQL用のhelm upgrade 値ファイルを上書きすることができます。デフォルトは.gitlab/auto-deploy-postgres-values.yaml です。 |
POSTGRES_HELM_UPGRADE_EXTRA_ARGS | GitLab 13.8以降、およびauto-deploy-image v2を使用している場合、この変数によってアプリケーションのデプロイ時にhelm upgrade コマンドで追加のPostgreSQLオプションを指定することができます。引用符を使っても単語の分割は防げません。 |
POSTGRES_CHART_REPOSITORY | PostgreSQL Chartの検索に使用するHelm Chartリポジトリです。デフォルトはhttps://raw.githubusercontent.com/bitnami/charts/eb5f9a9513d987b519f0ecd732e7031241c50328/bitnami です。 |
POSTGRES_CHART_VERSION | PostgreSQL チャートで使用する Helm Chart のバージョン。デフォルトは8.2.1 です。 |
ジョブを無効にする変数
CI/CDジョブを無効にするにはこれらの変数を使います。
ジョブ名 | CI/CD 変数 | GitLab バージョン | 説明 |
---|---|---|---|
.fuzz_base | COVFUZZ_DISABLED | GitLab 13.2より |
.fuzz_base がどのように独自のジョブの機能を提供するかについては、こちらをご覧ください。値が"true" の場合、ジョブは作成されません。 |
apifuzzer_fuzz | API_FUZZING_DISABLED | GitLab 13.3より | 値が"true" の場合、ジョブは作成されません。 |
build | BUILD_DISABLED | 変数が存在する場合、ジョブは作成されません。 | |
build_artifact | BUILD_DISABLED | 変数が存在する場合、ジョブは作成されません。 | |
brakeman-sast | SAST_DISABLED | 値が"true" の場合、ジョブは作成されません。 | |
canary | CANARY_ENABLED | 変数が存在する場合、この手動ジョブは作成されます。 | |
code_intelligence | CODE_INTELLIGENCE_DISABLED | GitLab 13.6 より | 変数が存在する場合、ジョブは作成されません。 |
code_quality | CODE_QUALITY_DISABLED | 値が"true" の場合、ジョブは作成されません。 | |
container_scanning | CONTAINER_SCANNING_DISABLED | 値が"true" の場合、ジョブは作成されません。 | |
dast | DAST_DISABLED | 値が"true" の場合、ジョブは作成されません。 | |
dast_environment_deploy |
DAST_DISABLED_FOR_DEFAULT_BRANCH またはDAST_DISABLED
| GitLab 12.4 より | 値が"true" の場合、ジョブは作成されません。 |
dependency_scanning | DEPENDENCY_SCANNING_DISABLED | 値が"true" の場合、ジョブは作成されません。 | |
flawfinder-sast | SAST_DISABLED | 値が"true" の場合、ジョブは作成されません。 | |
gemnasium-dependency_scanning | DEPENDENCY_SCANNING_DISABLED | 値が"true" の場合、ジョブは作成されません。 | |
gemnasium-maven-dependency_scanning | DEPENDENCY_SCANNING_DISABLED | 値が"true" の場合、ジョブは作成されません。 | |
gemnasium-python-dependency_scanning | DEPENDENCY_SCANNING_DISABLED | 値が"true" の場合、ジョブは作成されません。 | |
kubesec-sast | SAST_DISABLED | 値が"true" の場合、ジョブは作成されません。 | |
license_management | LICENSE_MANAGEMENT_DISABLED | GitLab 12.7 以前 | 変数が存在する場合、ジョブは作成されません。GitLab 12.8から廃止されたジョブ。 |
license_scanning | LICENSE_MANAGEMENT_DISABLED | GitLab 12.8から | 値が"true" の場合、ジョブは作成されません。 |
load_performance | LOAD_PERFORMANCE_DISABLED | GitLab 13.2より | 変数が存在する場合、ジョブは作成されません。 |
nodejs-scan-sast | SAST_DISABLED | 値が"true" の場合、ジョブは作成されません。 | |
performance | PERFORMANCE_DISABLED | GitLab 13.12 以前 | ブラウザのパフォーマンス。変数が存在する場合、ジョブは作成されません。browser_performance に置き換えられました。 |
browser_performance | BROWSER_PERFORMANCE_DISABLED | GitLab 14.0 より。 | ブラウザのパフォーマンス。変数が存在する場合、ジョブは作成されません。performance を置き換えます。 |
phpcs-security-audit-sast | SAST_DISABLED | 値が"true" の場合、ジョブは作成されません。 | |
pmd-apex-sast | SAST_DISABLED | 値が"true" の場合、ジョブは作成されません。 | |
review | REVIEW_DISABLED | 変数が存在する場合、ジョブは作成されません。 | |
review:stop | REVIEW_DISABLED | 手動ジョブ。変数が存在する場合、ジョブは作成されません。 | |
secret_detection | SECRET_DETECTION_DISABLED | GitLab 13.1 より | 値が"true" の場合、ジョブは作成されません。 |
secret_detection_default_branch | SECRET_DETECTION_DISABLED | GitLab 13.2より | 値が"true" の場合、ジョブは作成されません。 |
semgrep-sast | SAST_DISABLED | 値が"true" の場合、ジョブは作成されません。 | |
sobelow-sast | SAST_DISABLED | 値が"true" の場合、ジョブは作成されません。 | |
stop_dast_environment |
DAST_DISABLED_FOR_DEFAULT_BRANCH またはDAST_DISABLED
| GitLab 12.4 より | 値が"true" の場合、ジョブは作成されません。 |
spotbugs-sast | SAST_DISABLED | 値が"true" の場合、ジョブは作成されません。 | |
test | TEST_DISABLED | 変数が存在する場合、ジョブは作成されません。 | |
staging | STAGING_ENABLED | 変数が存在する場合、ジョブは作成されます。 | |
stop_review | REVIEW_DISABLED | 変数が存在する場合、ジョブは作成されません。 |
アプリケーション秘密変数の設定
デプロイされたアプリケーションの中には、シークレット変数へのアクセスが必要なものがあります。Auto DevOps はK8S_SECRET_
で始まる CI/CD 変数を検出し、環境変数としてデプロイされたアプリケーションで利用できるようにします。
前提条件
- 変数値は1行であること。
シークレット変数を設定するには:
- 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
- Settings > CI/CDを選択します。
- 変数]を展開します。
-
K8S_SECRET_
という接頭辞を持つ CI/CD 変数を作成します。例えば、K8S_SECRET_RAILS_MASTER_KEY
という変数を作成します。 - 手動で新しいパイプラインを作成するか、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スクリプト環境の制限により、複数行の値を持つ変数はサポートされていません。
レプリカ変数の設定
デプロイをスケールしたい場合は、レプリカ変数を追加します:
- プロジェクトのCI/CD変数としてレプリカ変数を追加します。
-
アプリケーションをスケールするには、再デプロイします。
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_MODE
をmanual
に設定します。
INCREMENTAL_ROLLOUT_MODE
をmanual
に設定すると、GitLabは4つの手動ジョブを作成します:
rollout 10%
rollout 25%
rollout 50%
rollout 100%
このパーセンテージはREPLICAS
CI/CD 変数に基づいており、デプロイに使用するポッドの数を定義します。例えば、値が10
で10%
rollout ジョブを実行した場合、アプリケーションは1つのポッドのみにデプロイされます。
ロールアウトジョブは任意の順序で実行できます。スケールダウンするには、より低いパーセンテージのジョブを再実行します。
rollout 100%
ジョブを実行した後はスケールダウンできないため、デプロイをロールバックする必要があります。
増分ロールアウトの設定例
INCREMENTAL_ROLLOUT_MODE
、STAGING_ENABLED
:
INCREMENTAL_ROLLOUT_MODE
なし、STAGING_ENABLED
あり:
INCREMENTAL_ROLLOUT_MODE
をmanual
に設定し、STAGING_ENABLED
を設定しない場合:
INCREMENTAL_ROLLOUT_MODE
をmanual
に設定し、STAGING_ENABLED
を設定した場合:
本番環境への時間差ロールアウト
時限インクリメンタルロールアウトを使用して、わずかなポッドからアプリケーションを継続的にデプロイします。
プロジェクト設定で時限インクリメンタルデプロイを有効にするか、INCREMENTAL_ROLLOUT_MODE
CI/CD 変数をtimed
に設定します。
INCREMENTAL_ROLLOUT_MODE
をtimed
に設定すると、GitLab は4つのジョブを作成します:
timed rollout 10%
timed rollout 25%
timed rollout 50%
timed rollout 100%
ジョブの間には5分間の遅延があります。