GitLab 기능 버전 플래그 뒤에서의 기능 활성화 및 비활성화

Tier: Free, Premium, Ultimate Offering: Self-Managed

GitLab은 기능 플래그 전략을 채택하여 기능이 초기 개발 단계에서 배포되어 점진적으로 출시될 수 있도록 합니다.

기능을 영구적으로 사용할 수 있게 하기 전에, 기능은 다양한 이유로 플래그 뒤에 배포될 수 있습니다:

  • 기능을 테스트하기 위해.
  • 사용자와 고객으로부터 피드백을 받기 위해 기능이 초기 개발 단계에 있을 때.
  • 사용자의 채택을 평가하기 위해.
  • GitLab의 성능에 미치는 영향을 평가하기 위해.
  • 릴리스를 통해 기능을 작은 조각으로 빌드하기 위해.

플래그 뒤의 기능은 일반적으로 점진적으로 배포됩니다:

  1. 기능은 기본적으로 비활성화됩니다.
  2. 기능은 기본적으로 활성화됩니다.
  3. 플래그가 제거됩니다.

이러한 기능은 사용자가 사용할 수 있도록 활성화하거나 비활성화할 수 있습니다. 이는 GitLab 관리자가 레일즈 콘솔 또는 기능 플래그 API에 액세스할 수 있을 때 수행할 수 있습니다.

기능 플래그를 비활성화하면 해당 기능은 사용자에게 숨겨지고 모든 기능이 비활성화됩니다. 예를 들어, 데이터는 기록되지 않고 서비스는 실행되지 않습니다.

특정 기능을 사용하고 버그, 잘못된 동작 또는 오류를 파악했다면, 그 문제에 대한 피드백을 가능한 한 빨리 제공하여 GitLab이 개선하거나 수정할 수 있도록 중요합니다. GitLab을 업그레이드하면 기능 플래그 상태가 변경될 수 있습니다.

아직 개발 중인 기능 활성화 시의 위험

제품 환경의 비활성화된 기능 플래그를 활성화하기 전에 관련된 잠재적인 위험을 이해하는 것이 매우 중요합니다.

경고: 기본적으로 비활성화된 기능을 활성화하면 데이터 손상, 안정성 감소, 성능 저하 및 보안 문제가 발생할 수 있습니다.

기본적으로 비활성화된 기능 플래그 뒤에 있는 기능은 제품 환경에서 사용하기에 적합하지 않으며, 기본적으로 비활성화된 기능을 사용함으로써 발생한 문제는 GitLab 지원이 보장하지 않습니다.

기본적으로 비활성화된 기능에서 발견된 보안 문제는 정기적인 릴리스에서 수정되며, 동일한 수정에 대한 유지 정책에 따라 백포팅되지 않습니다.

출시된 기능을 비활성화할 때의 위험

대부분의 경우, 기능 플래그 코드는 향후 GitLab 버전에서 제거됩니다. 그러나 해당 버전 이후로는 해당 기능을 비활성화된 상태로 유지할 수 없습니다.

기능 플래그 뒤에서의 기능을 활성화하고 비활성화하는 방법

각 기능은 자체 플래그를 가지고 있으며, 그 플래그를 사용하여 기능을 활성화하거나 비활성화해야 합니다. 플래그 뒤에 있는 각 기능의 설명서에는 플래그의 상태 및 활성화 또는 비활성화할 명령에 대한 섹션이 포함되어 있습니다.

GitLab Rails 콘솔 시작

플래그 뒤에 있는 기능을 활성화하거나 비활성화하려면 먼저 GitLab Rails 콘솔 세션을 시작해야 합니다.

Linux 패키지 설치를 위한:

sudo gitlab-rails console

소스에서의 설치를 위한:

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

세부 정보는 Rails 콘솔 세션 시작을 참조하십시오.

기능 활성화 또는 비활성화

Rails 콘솔 세션이 시작되면 Feature.enable 또는 Feature.disable 명령을 해당 기능의 설명서에서 찾을 수 있습니다.

기능을 활성화하려면 실행하십시오:

Feature.enable(:<기능 플래그>)

예를 들어, example_feature라는 가상의 기능 플래그를 활성화하려면:

Feature.enable(:example_feature)

기능을 비활성화하려면 실행하십시오:

Feature.disable(:<기능 플래그>)

예를 들어, example_feature라는 가상의 기능 플래그를 비활성화하려면:

Feature.disable(:example_feature)

일부 기능 플래그는 프로젝트별로 활성화 또는 비활성화할 수 있습니다:

Feature.enable(:<기능 플래그>, Project.find(<프로젝트 ID>))

예를 들어, 프로젝트 1234에 대해 :example_feature 기능 플래그를 활성화하려면:

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

일부 기능 플래그는 사용자별로 활성화 또는 비활성화할 수 있습니다. 예를 들어, sidney_jones 사용자에 대해 :example_feature 플래그를 활성화하려면:

Feature.enable(:example_feature, User.find_by_username("sidney_jones"))

Feature.enableFeature.disable은 어플리케이션이 해당 플래그를 사용하지 않더라도 항상 true를 반환합니다:

irb(main):001:0> Feature.enable(:example_feature)
=> true

해당 기능이 준비되면 GitLab은 해당 플래그를 제거하고, 더는 활성화 또는 비활성화할 수 있는 옵션이 존재하지 않습니다. 해당 기능은 모든 인스턴스에서 사용할 수 있게 됩니다.

기능 플래그가 활성화되었는지 확인

플래그가 활성화되었는지 또는 비활성화되었는지 확인하려면, Feature.enabled? 또는 Feature.disabled?을 사용하십시오. 예를 들어, 이미 활성화된 example_feature라는 기능 플래그에 대해:

Feature.enabled?(:example_feature)
=> true
Feature.disabled?(:example_feature)
=> false

해당 기능이 준비되면 GitLab은 해당 플래그를 제거하고, 더는 활성화 또는 비활성화할 수 있는 옵션이 존재하지 않습니다. 해당 기능은 모든 인스턴스에서 사용할 수 있게 됩니다.

설정된 기능 플래그 보기

모든 GitLab 관리자 설정 기능 플래그를 볼 수 있습니다:

Feature.all
=> [#<Flipper::Feature:198220 name="example_feature", state=:on, enabled_gate_names=[:boolean], adapter=:memoizable>]

# 좋은 출력
Feature.all.map {|f| [f.name, f.state]}

기능 플래그 해제

특정 기능 플래그를 해제하여 GitLab이 해당 플래그에 대한 현재 기본값으로 되돌아가도록 할 수 있습니다:

Feature.remove(:example_feature)
=> true