Feature Flags

原文:https://docs.gitlab.com/ee/operations/feature_flags.html

Feature Flags

在 GitLab 11.4 中引入 .

借助功能标志,您可以将应用程序的新功能部署到较小的批量生产中. 您可以将功能打开或关闭到部分用户,以帮助您实现持续交付. 功能标记有助于降低风险,使您能够进行受控测试,并将功能交付与客户发布分开.

有关实际使用的功能标志的示例,请参阅用于部署的 GitLab,功能标志和错误跟踪 .

How it works

GitLab 使用功能切换服务Unleash .

通过在 GitLab 中启用或禁用标记,您的应用程序可以确定要启用或禁用的功能.

您可以在 GitLab 中创建功能标记,并使用应用程序中的 API 来获取功能标记及其状态的列表. 必须将应用程序配置为与 GitLab 进行通信,因此,开发人员可以使用兼容的客户端库并将功能标记集成到您的应用程序中 .

Create a feature flag

要创建并启用功能标志:

  1. 导航到项目的” 操作”>”功能标志” .
  2. 单击新功能标志按钮.
  3. 输入一个以字母开头的名称,该名称仅包含小写字母,数字,下划线( _ )或破折号( - ),并且不以破折号( - )或下划线( _ )结尾.
  4. 输入描述(可选,最多 255 个字符).
  5. Enter details about how the flag should be applied:
    • 在 GitLab 13.0 和更早版本中,添加Environment specs . 对于每个环境,包括” 状态” (默认启用)和” 部署”策略 (默认为” 所有用户” ).
    • 在 GitLab 13.1 和更高版本中,添加 Feature Flag Strategies . 对于每种策略,请包括” 类型” (默认为” 所有用户” )和” 环境” (默认为所有环境).
  6. Click 创建功能标志.

您可以通过单击 列表中任何功能标志旁边的(编辑)按钮.

Rollout strategy (legacy)

在 GitLab 12.2 中引入 .

在 GitLab 13.0 和更早版本中,” 推出”策略设置会影响哪些用户将启用该功能. 选择要启用该功能的用户百分比. 如果禁用环境规范,则推出策略将无效.

可以设置为:

  • 全部用户
  • Percent of users
    • (可选)您可以单击” 包括其他用户 ID”复选框,并添加特定用户 ID 列表以启用该功能.
  • User IDs

Feature flag strategies

版本历史

  • 在 GitLab 13.0 中引入 .
  • 它部署在功能标记后面,默认情况下处于禁用状态.
  • 在 GitLab.com 上启用了它.
  • 要在 GitLab 自管实例中使用它,请让 GitLab 管理员启用它 .

您可以在多个环境中应用功能标记策略,而无需多次定义策略.

GitLab 功能标志使用Unleash作为功​​能标志引擎. 在”释放”中,有用于粒度特征标志控件的策略 . GitLab 功能标志可以有多种策略,支持的策略有:

可以在创建功能部件标记时将策略添加到功能部件标记,也可以在创建后通过导航到” 操作”>”功能部件标记”并单击以编辑现有功能部件标记 (编辑).

All users

为所有用户启用该功能. 它使用default释放激活策略.

Percent of Users

为一定百分比的已认证用户启用该功能. 它使用gradualRolloutUserId释放激活策略.

例如,将值设置为 15%即可为 15%的经过身份验证的用户启用该功能.

推出百分比可以从 0%到 100%.

注意:对于已登录的用户,但对于匿名用户,保证了粘性(同一用户的一致应用程序行为).警告:如果选择此策略,则必须为 Unleash 客户端提供一个用户 ID,以启用该功能. 请参见下面的Ruby 示例 .

User IDs

在 GitLab 12.2 中引入 . 更新为在 GitLab 12.6 中按环境定义.

为目标用户列表启用该功能. 它是使用 Unleash userWithId激活策略实现的.

输入用户 ID 作为逗号分隔的值列表. 例如, user@example.com, user2@example.comusername1,username2,username3等.

注意:用户 ID 是您的应用程序用户的标识符. 他们不必是 GitLab 用户.注意: 必须为 Unleash 客户端提供用户 ID,才能为目标用户启用该功能. 请参见下面的Ruby 示例 .

User List

在 GitLab 13.1 中引入 .

为使用Feature Flag User List API创建的用户列表启用功能. 与用户 ID相似,它使用 Unleash userWithId激活策略.

Enable or disable feature flag strategies

此功能正在开发中,但已准备好进行测试. 它部署在默认情况下禁用的功能标志的后面. 有权访问 GitLab Rails 控制台的 GitLab 管理员可以为您的实例启用它.

要启用它:

  1. Feature.enable(:feature_flags_new_version)

禁用它:

  1. Feature.disable(:feature_flags_new_version)

Disable a feature flag for a specific environment

GitLab 13.0 和更早版本中 ,要为特定环境禁用功能标志:

  1. 导航到项目的” 操作”>”功能标志” .
  2. 对于要禁用的功能标志,请单击”铅笔”图标.
  3. 禁用标志:

    • 在 GitLab 13.0 和更低版本中:滑动环境的”状态”切换. 或者,要删除环境规范,请单击右侧的” 删除(X)”图标.
    • 在 GitLab 13.1 及更高版本:对于每一个战略,它适用于在环境 ,删除环境.
  4. Click 保存更改.

Disable a feature flag for all environments

禁用所有环境的功能标志:

  1. 导航到项目的” 操作”>”功能标志” .
  2. 对于要禁用的功能标志,请将状态切换滑动到禁用 .

功能标志显示在” 禁用”选项卡上.

Integrate feature flags with your application

要在应用程序中使用功能标志,请从 GitLab 获取访问凭据. 然后使用客户端库准备您的应用程序.

Get access credentials

要获取您的应用程序需要与 GitLab 通信的访问凭据:

  1. 导航到项目的” 操作”>”功能标志” .
  2. 单击配置按钮以查看以下内容:
    • API URL :客户端(应用程序)连接以获取功能标志列表的 URL.
    • 实例 ID :授权检索功能标志的唯一令牌.
    • 应用程序名称 :运行环境的名称. 例如,如果应用程序为生产服务器运行,则应用程序名称将为production或类似名称. 该值用于环境规格评估.

注意:这些字段的含义可能会随着时间而改变. 例如,我们不确定实例 ID是分配给Environment 的是单个令牌还是多个令牌. 另外, 应用程序名称可以描述应用程序的版本,而不是运行环境.

Choose a client library

GitLab 实现与 Unleash 客户端兼容的单个后端.

使用 Unleash 客户端,开发人员可以在应用程序代码中定义标志的默认值. 如果提供的配置文件中不存在该标志,则每个功能标志评估都可以表达所需的结果.

目前,Unleash 提供了许多用于各种语言和框架的 SDK .

Feature flags API information

有关 API 的内容,请参见:

Golang application example

这是一个如何在 Golang 应用程序中集成特征标记的示例:

  1. package main
  2. import (
  3. "io"
  4. "log"
  5. "net/http"
  6. "github.com/Unleash/unleash-client-go"
  7. )
  8. type metricsInterface struct {
  9. }
  10. func init() {
  11. unleash.Initialize(
  12. unleash.WithUrl("https://gitlab.com/api/v4/feature_flags/unleash/42"),
  13. unleash.WithInstanceId("29QmjsW6KngPR5JNPMWx"),
  14. unleash.WithAppName("production"),
  15. unleash.WithListener(&metricsInterface{}),
  16. )
  17. }
  18. func helloServer(w http.ResponseWriter, req *http.Request) {
  19. if unleash.IsEnabled("my_feature_name") {
  20. io.WriteString(w, "Feature enabled\n")
  21. } else {
  22. io.WriteString(w, "hello, world!\n")
  23. }
  24. }
  25. func main() {
  26. http.HandleFunc("/", helloServer)
  27. log.Fatal(http.ListenAndServe(":8080", nil))
  28. }

Ruby application example

这是一个如何在 Ruby 应用程序中集成功能标记的示例.

为 Unleash 客户端提供了一个用户 ID,以与” 百分比”卷展栏(已登录用户)卷展策略或” 目标用户”列表一起使用.

  1. #!/usr/bin/env ruby
  2. require 'unleash'
  3. require 'unleash/context'
  4. unleash = Unleash::Client.new({
  5. url: 'http://gitlab.com/api/v4/feature_flags/unleash/42',
  6. app_name: 'production',
  7. instance_id: '29QmjsW6KngPR5JNPMWx'
  8. })
  9. unleash_context = Unleash::Context.new
  10. # Replace "123" with the id of an authenticated user.
  11. # Note that the context's user id must be a string:
  12. # https://unleash.github.io/docs/unleash_context
  13. unleash_context.user_id = "123"
  14. if unleash.is_enabled?("my_feature_name", unleash_context)
  15. puts "Feature enabled"
  16. else
  17. puts "hello, world!"
  18. end

Feature Flag Related Issues

版本历史

  • 在 GitLab 13.2 中引入 .
  • 它部署在默认情况下启用的功能标志后面.
  • 在 GitLab.com 上启用了它.
  • 不能根据项目启用或禁用它
  • 建议用于生产.
  • 对于 GitLab 自我管理的实例,GitLab 管理员可以选择禁用它.

您可以将相关问题链接到功能标志. 在” 链接的问题”部分中,单击+按钮,然后输入问题参考编号或问题的完整 URL.

此功能类似于相关问题功能.

Enable or disable Feature Flag Related Issues

与功能标记相关​​的问题正在开发中,但已准备好用于生产. 它部署在默认情况下启用的功能标志的后面. 有权访问 GitLab Rails 控制台的 GitLab 管理员可以选择为您的实例禁用它.

禁用它:

  1. Feature.disable(:feature_flags_issue_links)

To enable it:

  1. Feature.enable(:feature_flags_issue_links)