# Feature Flags > 原文:[https://docs.gitlab.com/ee/operations/feature_flags.html](https://docs.gitlab.com/ee/operations/feature_flags.html) * [How it works](#how-it-works) * [Create a feature flag](#create-a-feature-flag) * [Rollout strategy (legacy)](#rollout-strategy-legacy) * [Feature flag strategies](#feature-flag-strategies) * [All users](#all-users) * [Percent of Users](#percent-of-users) * [User IDs](#user-ids) * [User List](#user-list) * [Enable or disable feature flag strategies](#enable-or-disable-feature-flag-strategies) * [Disable a feature flag for a specific environment](#disable-a-feature-flag-for-a-specific-environment) * [Disable a feature flag for all environments](#disable-a-feature-flag-for-all-environments) * [Integrate feature flags with your application](#integrate-feature-flags-with-your-application) * [Get access credentials](#get-access-credentials) * [Choose a client library](#choose-a-client-library) * [Feature flags API information](#feature-flags-api-information) * [Golang application example](#golang-application-example) * [Ruby application example](#ruby-application-example) * [Feature Flag Related Issues](#feature-flag-related-issues) * [Enable or disable Feature Flag Related Issues](#enable-or-disable-feature-flag-related-issues-core-only) # Feature Flags[](#feature-flags-premium "Permalink") 在 GitLab 11.4 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/7433) . 借助功能标志,您可以将应用程序的新功能部署到较小的批量生产中. 您可以将功能打开或关闭到部分用户,以帮助您实现持续交付. 功能标记有助于降低风险,使您能够进行受控测试,并将功能交付与客户发布分开. 有关实际使用的功能标志的示例,请参阅[用于部署的 GitLab,功能标志和错误跟踪](https://www.youtube.com/embed/5tw2p6lwXxo) . ## How it works[](#how-it-works "Permalink") GitLab 使用功能切换服务[Unleash](https://github.com/Unleash/unleash) . 通过在 GitLab 中启用或禁用标记,您的应用程序可以确定要启用或禁用的功能. 您可以在 GitLab 中创建功能标记,并使用应用程序中的 API 来获取功能标记及其状态的列表. 必须将应用程序配置为与 GitLab 进行通信,因此,开发人员可以使用兼容的客户端库并将[功能标记集成到您的应用程序中](#integrate-feature-flags-with-your-application) . ## Create a feature flag[](#create-a-feature-flag "Permalink") 要创建并启用功能标志: 1. 导航到项目的" **操作">"功能标志"** . 2. 单击**新功能标志**按钮. 3. 输入一个以字母开头的名称,该名称仅包含小写字母,数字,下划线( `_` )或破折号( `-` ),并且不以破折号( `-` )或下划线( `_` )结尾. 4. 输入描述(可选,最多 255 个字符). 5. Enter details about how the flag should be applied: * 在 GitLab 13.0 和更早版本中,添加**Environment specs** . 对于每个环境,包括" **状态"** (默认启用)和" [**部署"策略**](#rollout-strategy-legacy) (默认为" **所有用户"** ). * 在 GitLab 13.1 和更高版本中,添加 Feature Flag [**Strategies**](#feature-flag-strategies) . 对于每种策略,请包括" **类型"** (默认为" [**所有用户"**](#all-users) )和" **环境"** (默认为所有环境). 6. Click **创建功能标志**. 您可以通过单击 列表中任何功能标志旁边的(编辑)按钮. ## Rollout strategy (legacy)[](#rollout-strategy-legacy "Permalink") 在 GitLab 12.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/8240) . 在 GitLab 13.0 和更早版本中," **推出"策略**设置会影响哪些用户将启用该功能. 选择要启用该功能的用户百分比. 如果禁用环境规范,则推出策略将无效. 可以设置为: * 全部用户 * [Percent of users](#percent-of-users) * (可选)您可以单击" **包括其他用户 ID"**复选框,并添加特定用户 ID 列表以启用该功能. * [User IDs](#user-ids) ## Feature flag strategies[](#feature-flag-strategies "Permalink") 版本历史 * 在 GitLab 13.0 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/35555) . * 它部署在功能标记后面,默认情况下处于禁用状态. * 在 GitLab.com 上启用了它. * 要在 GitLab 自管实例中使用它,请让 GitLab 管理员[启用它](#enable-or-disable-feature-flag-strategies) . 您可以在多个环境中应用功能标记策略,而无需多次定义策略. GitLab 功能标志使用[Unleash](https://unleash.github.io)作为功​​能标志引擎. 在"释放"中,有用于粒度特征标志控件的[策略](https://unleash.github.io/docs/activation_strategy) . GitLab 功能标志可以有多种策略,支持的策略有: * [All users](#all-users) * [Percent of Users](#percent-of-users) * [User IDs](#user-ids) * [User List](#user-list) 可以在[创建](#create-a-feature-flag)功能部件标记时将策略添加到功能部件标记,也可以在[创建](#create-a-feature-flag)后通过导航到" **操作">"功能部件标记"**并单击以编辑现有功能部件标记 (编辑). ### All users[](#all-users "Permalink") 为所有用户启用该功能. 它使用[`default`](https://unleash.github.io/docs/activation_strategy#default)释放激活策略. ### Percent of Users[](#percent-of-users "Permalink") 为一定百分比的已认证用户启用该功能. 它使用[`gradualRolloutUserId`](https://unleash.github.io/docs/activation_strategy#gradualrolloutuserid)释放激活策略. 例如,将值设置为 15%即可为 15%的经过身份验证的用户启用该功能. 推出百分比可以从 0%到 100%. **注意:**对于已登录的用户,但对于匿名用户,保证了粘性(同一用户的一致应用程序行为).**警告:**如果选择此策略,则**必须**为 Unleash 客户端提供一个用户 ID,以启用该功能. 请参见下面的[Ruby 示例](#ruby-application-example) . ### User IDs[](#user-ids "Permalink") 在 GitLab 12.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/8240) . [更新](https://gitlab.com/gitlab-org/gitlab/-/issues/34363)为在 GitLab 12.6 中按环境定义. 为目标用户列表启用该功能. 它是使用 Unleash [`userWithId`](https://unleash.github.io/docs/activation_strategy#userwithid)激活策略实现的. 输入用户 ID 作为逗号分隔的值列表. 例如, `user@example.com, user2@example.com`或`username1,username2,username3`等. **注意:**用户 ID 是您的应用程序用户的标识符. 他们不必是 GitLab 用户.**注意:** **必须**为 Unleash 客户端提供用户 ID,才能为目标用户启用该功能. 请参见下面的[Ruby 示例](#ruby-application-example) . ### User List[](#user-list "Permalink") 在 GitLab 13.1 中[引入](https://gitlab.com/gitlab-org/gitlab/-/issues/35930) . 为使用[Feature Flag User List API](../api/feature_flag_user_lists.html)创建的[用户列表](../api/feature_flag_user_lists.html)启用功能. 与[用户 ID](#user-ids)相似,它使用 Unleash [`userWithId`](https://unleash.github.io/docs/activation_strategy#userwithid)激活策略. ### Enable or disable feature flag strategies[](#enable-or-disable-feature-flag-strategies "Permalink") 此功能正在开发中,但已准备好进行测试. 它部署在**默认情况下禁用**的功能标志的后面. [有权访问 GitLab Rails 控制台的 GitLab 管理员](../administration/feature_flags.html)可以为您的实例启用它. 要启用它: ``` Feature.enable(:feature_flags_new_version) ``` 禁用它: ``` Feature.disable(:feature_flags_new_version) ``` ## Disable a feature flag for a specific environment[](#disable-a-feature-flag-for-a-specific-environment "Permalink") 在[GitLab 13.0 和更早版本中](https://gitlab.com/gitlab-org/gitlab/-/issues/8621) ,要为特定环境禁用功能标志: 1. 导航到项目的" **操作">"功能标志"** . 2. 对于要禁用的功能标志,请单击"铅笔"图标. 3. 禁用标志: * 在 GitLab 13.0 和更低版本中:滑动环境的"状态"切换. 或者,要删除环境规范,请单击右侧的" **删除(X)"**图标. * 在 GitLab 13.1 及更高版本:对于每一个战略,它适用于在**环境** ,删除环境. 4. Click **保存更改**. ## Disable a feature flag for all environments[](#disable-a-feature-flag-for-all-environments "Permalink") 禁用所有环境的功能标志: 1. 导航到项目的" **操作">"功能标志"** . 2. 对于要禁用的功能标志,请将状态切换滑动到**禁用** . 功能标志显示在" **禁用"**选项卡上. ## Integrate feature flags with your application[](#integrate-feature-flags-with-your-application "Permalink") 要在应用程序中使用功能标志,请从 GitLab 获取访问凭据. 然后使用客户端库准备您的应用程序. ### Get access credentials[](#get-access-credentials "Permalink") 要获取您的应用程序需要与 GitLab 通信的访问凭据: 1. 导航到项目的" **操作">"功能标志"** . 2. 单击**配置**按钮以查看以下内容: * **API URL** :客户端(应用程序)连接以获取功能标志列表的 URL. * **实例 ID** :授权检索功能标志的唯一令牌. * **应用程序名称** :运行环境的名称. 例如,如果应用程序为生产服务器运行,则应用程序名称将为`production`或类似名称. 该值用于环境规格评估. **注意:**这些字段的含义可能会随着时间而改变. 例如,我们不确定**实例 ID**是分配给**Environment 的**是单个令牌还是多个令牌. 另外, **应用程序名称**可以描述应用程序的版本,而不是运行环境. ### Choose a client library[](#choose-a-client-library "Permalink") GitLab 实现与 Unleash 客户端兼容的单个后端. 使用 Unleash 客户端,开发人员可以在应用程序代码中定义标志的默认值. 如果提供的配置文件中不存在该标志,则每个功能标志评估都可以表达所需的结果. 目前,Unleash [提供了许多用于各种语言和框架的 SDK](https://github.com/Unleash/unleash#client-implementations) . ### Feature flags API information[](#feature-flags-api-information "Permalink") 有关 API 的内容,请参见: * [Feature Flags API](../api/feature_flags.html) * [功能标志规范 API](../api/feature_flag_specs.html) (已[在 GitLab 14.0 中](https://gitlab.com/gitlab-org/gitlab/-/issues/213369)弃用并[计划将其删除](https://gitlab.com/gitlab-org/gitlab/-/issues/213369) .) * [Feature Flag User Lists API](../api/feature_flag_user_lists.html) * [Legacy Feature Flags API](../api/feature_flags_legacy.html) ### Golang application example[](#golang-application-example "Permalink") 这是一个如何在 Golang 应用程序中集成特征标记的示例: ``` package main import ( "io" "log" "net/http" "github.com/Unleash/unleash-client-go" ) type metricsInterface struct { } func init() { unleash.Initialize( unleash.WithUrl("https://gitlab.com/api/v4/feature_flags/unleash/42"), unleash.WithInstanceId("29QmjsW6KngPR5JNPMWx"), unleash.WithAppName("production"), unleash.WithListener(&metricsInterface{}), ) } func helloServer(w http.ResponseWriter, req *http.Request) { if unleash.IsEnabled("my_feature_name") { io.WriteString(w, "Feature enabled\n") } else { io.WriteString(w, "hello, world!\n") } } func main() { http.HandleFunc("/", helloServer) log.Fatal(http.ListenAndServe(":8080", nil)) } ``` ### Ruby application example[](#ruby-application-example "Permalink") 这是一个如何在 Ruby 应用程序中集成功能标记的示例. 为 Unleash 客户端提供了一个用户 ID,以与" **百分比"卷展栏(已登录用户)卷**展策略或" **目标用户"**列表一起使用. ``` #!/usr/bin/env ruby require 'unleash' require 'unleash/context' unleash = Unleash::Client.new({ url: 'http://gitlab.com/api/v4/feature_flags/unleash/42', app_name: 'production', instance_id: '29QmjsW6KngPR5JNPMWx' }) unleash_context = Unleash::Context.new # Replace "123" with the id of an authenticated user. # Note that the context's user id must be a string: # https://unleash.github.io/docs/unleash_context unleash_context.user_id = "123" if unleash.is_enabled?("my_feature_name", unleash_context) puts "Feature enabled" else puts "hello, world!" end ``` ## Feature Flag Related Issues[](#feature-flag-related-issues "Permalink") 版本历史 * 在 GitLab 13.2 中[引入](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/36617) . * 它部署在默认情况下启用的功能标志后面. * 在 GitLab.com 上启用了它. * 不能根据项目启用或禁用它 * 建议用于生产. * 对于 GitLab 自我管理的实例,GitLab 管理员可以选择禁用它. 您可以将相关问题链接到功能标志. 在" **链接的问题"**部分中,单击`+`按钮,然后输入问题参考编号或问题的完整 URL. 此功能类似于[相关问题](../user/project/issues/related_issues.html)功能. ### Enable or disable Feature Flag Related Issues[](#enable-or-disable-feature-flag-related-issues-core-only "Permalink") 与功能标记相关​​的问题正在开发中,但已准备好用于生产. 它部署在**默认情况下启用**的功能标志的后面. [有权访问 GitLab Rails 控制台的 GitLab 管理员](../administration/feature_flags.html)可以选择为您的实例禁用它. 禁用它: ``` Feature.disable(:feature_flags_issue_links) ``` To enable it: ``` Feature.enable(:feature_flags_issue_links) ```