197.md 13.6 KB
Newer Older
Lab机器人's avatar
readme  
Lab机器人 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290
# 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) 
```