featureフラグの後ろにデプロイされたGitLab機能の有効化・無効化

GitLabはフィーチャーフラッグ戦略を採用し、開発者の早い段階でフィーチャーをデプロイし、インクリメンタルにロールアウトできるようにしました。

永続的に利用できるようにする前に、以下のような理由でフラグの後ろに機能をデプロイすることができます:

  • この機能をテストするには
  • 機能開発の初期段階で、ユーザーや顧客からフィードバックを得るため。
  • ユーザーの採用評価
  • GitLabのパフォーマンスにどのような影響を与えるかを評価するため。
  • リリースの間、小分けにして作ること。

フラッグの背後にある機能は、通常、徐々に展開することができます:

  1. この機能はデフォルトでは無効になっています。
  2. この機能はデフォルトで有効になります。
  3. 機能フラグが削除されます。

これらの機能は、GitLab RailsコンソールにアクセスできるGitLab管理者が有効/無効に設定することができます。

ある機能を使用し、バグや誤動作、エラーを確認した場合、次のようなフィードバックが非常に重要です。 フィードバックGitLab を以前のバージョンにアップグレードすると、機能フラグのステータスが変更されることがあります。

注意:機能フラグの後ろにデプロイされた機能は、本番環境では使用できない可能性があることに注意してください。 しかし、デフォルトで有効になっているフラグの後ろにある機能を無効にすることも、リスクをもたらす可能性があります。 有効になっている場合は、そのままにしておくことをお勧めします。

フラッグの背後にある機能の有効化と無効化の方法

各機能には、それを有効または無効にするために使用する独自のフラグがあります。 フラグの背後にある各機能のドキュメントには、フラグの状態とそれを有効または無効にするコマンドを通知するセクションが含まれています。

GitLab Rails コンソールを起動します。

フラグの背後にある機能を有効または無効にするには、まずGitLab Railsコンソールでセッションを開始する必要があります。

オムニバス・インストール用:

sudo gitlab-rails console

ソースからのインストールの場合:

sudo -u git -H bundle exec rails console -e production

詳しくはRailsコンソールセッションの開始をご覧ください。

機能の有効化または無効化

Railsのコンソールセッションが開始したら、Feature.enable またはFeature.disable コマンドを適宜実行してください。具体的なフラグについては、機能のドキュメントを参照してください。

機能を有効にするには

Feature.enable(:<feature flag>)

例:Evidence Collection を有効にします:

Feature.enable(:release_evidence_collection)

機能を無効にするには

Feature.disable(:<feature flag>)

例:Evidence Collection を無効にします:

Feature.disable(:release_evidence_collection)

いくつかの機能フラグは、プロジェクトごとに有効または無効にすることができます:

Feature.enable(:<feature flag>, Project.find(<project id>))

例えば、プロジェクト1234:junit_pipeline_view 機能フラグを有効にするには、次のようにします:

Feature.enable(:junit_pipeline_view, Project.find(1234))

Feature.enableFeature.disable は常にnilを返しますが、これはコマンドが失敗したことを示すものではありません:

irb(main):001:0> Feature.enable(:release_evidence_collection)
=> nil

フラグが有効か無効かを確認するには、Feature.enabled? またはFeature.disabled?を使用します:

Feature.enable(:release_evidence_collection)
=> nil
Feature.enabled?(:release_evidence_collection)
=> true
Feature.disabled?(:release_evidence_collection)
=> false

機能の準備が整うと、GitLabは機能フラグを削除し、有効・無効のオプションは存在しなくなり、すべてのインスタンスで機能が利用できるようになります。