フィーチャーフラグ

GitLab 11.4 で導入されました。

機能フラグは、特定の機能を有効または無効にするためのトグルです。 これらのフラグは通常使用されます:

  • ボランティアによるテストは可能だが、すべてのユーザーに対して有効にする準備が整っていないベータ版機能。

    ベータ版の機能は、時に不完全であったり、さらなるテストが必要であったりします。 ベータ版の機能を使用したいユーザーは、そのリスクを受け入れ、機能フラグで明示的にその機能を有効にすることができます。 その機能を必要としない、あるいはシステム上のリスクを受け入れたくない他のユーザーは、デフォルトでその機能が無効になっており、起こりうるバグやリグレッションの影響を受けません。

  • 近い将来、機能が廃止されたり、機能が削除されたりするような変更。

    製品の進化に伴い、機能が変更されたり、完全に削除されたりすることもあります。 既知のバグは修正されることが多いですが、場合によっては、ユーザーが影響を受けたバグの回避策をすでに見つけていることもあり、標準化されたバグ修正をユーザーに強制すると、カスタマイズした構成で別の問題が発生する可能性があります。

    このような場合、機能フラグを使用して、古い動作から新しい動作にオンデマンドで切り替えます。 これにより、ユーザーは、古い動作から新しい動作へのスムーズで永続的な移行を計画する時間を与えながら、新しいバージョンの製品を採用することができます。

機能フラグは環境変数を使って切り替えます。 へ:

  • 機能フラグを有効にするには、対応する環境変数を"true" または1に設定します。
  • 機能フラグを無効にするには、対応する環境変数を"false" または0に設定します。

使用可能な機能フラグ

機能フラグ デフォルト値 非推奨 で除去します。 説明
FF_CMD_DISABLE_DELAYED_ERROR_LEVEL_EXPANSION false   Windowsバッチシェル使用時のエラーチェックのためにEnableDelayedExpansionを無効にします。
FF_NETWORK_PER_BUILD false   docker executorでビルドごとにDockerネットワークを作成可能。
FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY true   false に設定すると、リモート Kubernetes コマンドの実行がexec を経由して行われなくなり、#4119のような問題を解決するためにattach が優先されます。
FF_USE_DIRECT_DOWNLOAD true   true に設定すると、Runner は最初の試行で GitLab 経由のプロキシではなく、すべてのアーティファクトを直接ダウンロードしようとします。 有効にすると、GitLab によって有効化されている場合、オブジェクトストレージの TLS 証明書の検証に問題があり、ダウンロードに失敗することがあります。
FF_SKIP_NOOP_BUILD_STAGES true   false に設定すると、すべてのビルドステージが実行されます。
FF_SHELL_EXECUTOR_USE_LEGACY_PROCESS_KILL false 14.0 GitLab 13.1以前で使用されていた、SIGKILL のみを送信する古いプロセス終了を使用します。

パイプライン設定で機能フラグを有効化

CI変数を使って機能フラグを有効にすることができます:

  • パイプラインにあるすべてのジョブ(グローバル):

     variables:
       FEATURE_FLAG_NAME: 1
    
  • 一つのジョブに対して:

     job:
       stage: test
       variables:
         FEATURE_FLAG_NAME: 1
       script:
       - echo "Hello"
    

Runnerの機能フラグを有効にします。

Runnerが実行するすべてのジョブで機能を有効にするには、Runnerの設定でenvironment 変数として機能フラグを指定します:

[[runners]]
  name = "ruby-2.6-docker"
  url = "https://CI/"
  token = "TOKEN"
  limit = 0
  executor = "docker"
  builds_dir = ""
  shell = ""
  environment = ["FEATURE_FLAG_NAME=1"]