极狐GitLab Runner 功能标志
引入于极狐GitLab 11.4。
功能标志是允许您启用或禁用特定功能的开关。这些标志一般用于:
-
还未准备好向所有用户开放的用于测试的 beta 功能。
Beta 功能有时不完整或需要进一步测试。想要使用 beta 功能的用户可以选择接受风险并明确开启带有功能标志的功能。对于其他不需要这个功能或不愿意接受风险的用户,这个功能默认禁用,且不受可能的错误或回退的影响。
-
对于涉及到近期内功能弃用或移除的大改变。
随着产品的演进,有些功能会发生改变或完全移除。已知错误会被修复,但在一些情况下,用户已经找到了影响其错误的解决方法,强制用户以标准化的方法修复错误可能会导致其他自定义配置的问题。
在这种情况下,功能标签被用于按需从旧行为向新行为切换。 这种做法允许用户使用新版本的产品,但同时给予他们平缓持续地从旧行为向新行为切换的时间。
使用环境变量可以控制功能标记。用于:
- 激活功能标志,将对应环境变量设置为
"true"
或1
。 - 去激活功能标志,将对应环境变量设置为
"false"
或0
。
可用功能标志
功能标志 | 默认值 | 废弃 | 移除 | 描述 |
---|---|---|---|---|
FF_CMD_DISABLE_DELAYED_ERROR_LEVEL_EXPANSION
| false
| 否 | 使用 Window Batch Shell 时,为错误检查禁用启用延迟扩展。 | |
FF_NETWORK_PER_BUILD
| false
| 否 | 用 docker 执行器启用 Docker 每个构建的网络的创建。
| |
FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY
| false
| 否 | 设置为 false 时,会禁用远端 Kubernetes 命令通过 exec 的执行,代而使用 attach 。
| |
FF_USE_DIRECT_DOWNLOAD
| true
| 否 | 当设置为 true ,Runner 试图直接下载所有产物,而不是在第一次尝试时通过极狐GitLab 进行代理。如果由极狐GitLab 开启,可能会导致由验证对象存储的 TLS 证书问题而引发下载失败。详情请参见自签名证书或自定义证书授权。
| |
FF_SKIP_NOOP_BUILD_STAGES
| true
| 否 | 当设置为 false ,即使运行没有效果,也会执行所有构建阶段。
| |
FF_USE_FASTZIP
| false
| 否 | Fastzip 是缓存/产物归档和提取的归档。 | |
FF_DISABLE_UMASK_FOR_DOCKER_EXECUTOR
| false
| 否 | 如果启用,会移除对用 docker 执行器执行的作业的 umask 0000 调用。Runner 会试图发现构建容器所使用的镜像所配置的用户 UID 和 GID,并且会在预定义的容器(在更新源、恢复缓存和下载产物后)中通过运行 chmod 命令,更改工作目录的所有权。必须安装 POSIX utility id ,且它必须在这个功能标志的构建镜像中可运转。Runner 会使用 -u 和 -g 选项执行 id ,用以检索 UID 和 GID。
| |
FF_ENABLE_BASH_EXIT_CODE_CHECK
| false
| 否 | 如果启用,bash 脚本不仅依赖于 set -e ,但是在执行每个脚本命令后会检查非零退出码。
| |
FF_USE_WINDOWS_LEGACY_PROCESS_STRATEGY
| true
| 否 | 如果禁用,Runner 会使用额外设置在 Windows(Shell 和自定义执行器)上创建进程,这些设置应该改进进程终止。目前处于实验阶段,我们设置进程的方式会持续改进。当设置为 true ,会使用遗留进程设置。为了成功且优雅地耗尽 Windows Runner, 这个功能标志应该被设置为 false 。
| |
FF_USE_NEW_BASH_EVAL_STRATEGY
| false
| 否 | 当设置为 true ,会在子壳上执行 Bash eval 调用,以帮助执行脚本的合理退出码检测。
| |
FF_USE_POWERSHELL_PATH_RESOLVER
| false
| 否 | 如果启用,PowerShell 使用托管 Runner 的特定 OS 的文件路径功能去解析路径名,而不是 Runner。 | |
FF_USE_DYNAMIC_TRACE_FORCE_SEND_INTERVAL
| false
| 否 | 如果启用,跟踪强制发送间隔基于跟踪更新间隔进行动态调整。 | |
FF_SCRIPT_SECTIONS
| false
| 否 | 如果启用,来自 .gitlab-ci.yml 文件的每个脚本行会在作业输出的可折叠部分,并且展示每行的持续时间。
| |
FF_USE_NEW_SHELL_ESCAPE
| false
| 否 | 如果启用,使用 Shell 逃跑的快速执行。 | |
FF_ENABLE_JOB_CLEANUP
| false
| 否 | 如果启用,在构建结尾会清理项目目录。如果使用了 GIT_CLONE ,整个项目目录会被删除。如果使用了 GIT_FETCH ,会发行一系列 Git clean 命令。
| |
FF_KUBERNETES_HONOR_ENTRYPOINT
| false
| 否 | 如果启用,且 FF_USE_LEGACY_KUBERNETES_EXECUTION_STRATEGY 没被设置为”true”,镜像的 Docker 入口点将会被 honored。
| |
FF_POSIXLY_CORRECT_ESCAPES
| false
| 否 | 如果启用,会使用 POSIX Shell 逃跑,而不是 bash -style ANSI-C quoting。如果作业环境使用了符合 POSIX 的 Shell,它应该被启用。
| |
FF_USE_IMPROVED_URL_MASKING
| false
| 否 | 如果启用,不论在跟踪日志输出的哪里出现,任何敏感 URL 参数都会被隐藏。这个功能标志只能通过 Runner 的配置而不是作业进行配置。 | |
FF_RESOLVE_FULL_TLS_CHAIN
| true
| 否 | 启用后,Runner 会解析完整的 TLS 链,一直解析到 CI_SERVER_TLS_CA_FILE 的自签名根证书。对于使用 v7.68.0 之前的 libcurl 和 OpenSSL 构建的 Git 客户端来说,这以前是 Git HTTPS 克隆工作的必需条件。但是,在某些操作系统(例如 macOS)上解析证书可能会失败,这些操作系统拒绝使用较旧的签名算法签署的根证书。如果证书解析失败,您可能需要禁用此功能。此功能标志只能在 [runners.feature_flags] 配置 中禁用。
| |
FF_DISABLE_POWERSHELL_STDIN
| false
| 否 | 启用后,Shell 和自定义执行器的 PowerShell 脚本将通过文件传递,而不是通过标准输入传递和执行。 | |
FF_USE_POD_ACTIVE_DEADLINE_SECONDS
| false
| 否 | 启用后,pod activeDeadlineSeconds 会被设置为 CI/CD 作业超时时间。这个标志影响 pod 的生命周期。
| |
FF_USE_ADVANCED_POD_SPEC_CONFIGURATION
| false
| 否 | 启用后,用户可以在 config.toml 文件中设置整个 Pod 规范。更多信息请参见覆盖生成的 Pod 规范(Alpha)。
| |
FF_SET_PERMISSIONS_BEFORE_CLEANUP
| true
| 否 | 启用后,首先设置项目目录中的目录和文件权限,以确保清理时可以进行成功删除操作。 |
在工作流配置中启用功能标志
您可以使用 CI 变量启用功能标志:
-
对于所有工作流中的作业(全局):
variables: FEATURE_FLAG_NAME: 1
-
对于单个作业:
job: stage: test variables: FEATURE_FLAG_NAME: 1 script: - echo "Hello"
在 Runner 环境变量中启用功能标志
为每个 Runner 运行的作业启用功能,您需要指定功能标志为
Runner 配置中的 environment
变量。
[[runners]]
name = "ruby-2.7-docker"
url = "https://CI/"
token = "TOKEN"
limit = 0
executor = "docker"
builds_dir = ""
shell = ""
environment = ["FEATURE_FLAG_NAME=1"]
在 Runner 配置中启用功能标志
引入于极狐GitLab Runner 13.11。
您可以在 [runners.feature_flags]
下通过指定功能标志进行启用。
这个设置可以防止作业覆盖功能标志值。
当您配置这个设置时,一些功能标志也仅可用,因为他们不处理作业的执行方式。
[[runners]]
name = "ruby-2.7-docker"
url = "https://CI/"
token = "TOKEN"
executor = "docker"
[runners.feature_flags]
FF_USE_DIRECT_DOWNLOAD = true