Help us learn about your current experience with the documentation. Take the survey.

Workhorse 配置

由于历史原因,Workhorse 使用:

  • 命令行标志
  • 配置文件
  • 环境变量

将任何新的 Workhorse 配置选项添加到配置文件中。

CLI 选项

  gitlab-workhorse [OPTIONS]

Options:
  -apiCiLongPollingDuration duration
        运行器请求作业时的长轮询持续时间(默认 50ns)
  -apiLimit uint
        单次允许的 API 请求数量
  -apiQueueDuration duration
        请求的最大排队持续时间(默认 30s)
  -apiQueueLimit uint
        允许排队的 API 请求数量
  -authBackend string
        身份验证/授权后端(默认 "http://localhost:8080")
  -authSocket string
        可选:用于连接 authBackend 的 Unix 域套接字
  -cableBackend string
        ActionCable 后端
  -cableSocket string
        可选:用于连接 cableBackend 的 Unix 域套接字
  -config string
        加载配置的 TOML 文件
  -developmentMode
        允许从 Rails 应用提供资源
  -documentRoot string
        静态文件内容的路径(默认 "public")
  -listenAddr string
        HTTP 服务器的监听地址(默认 "localhost:8181")
  -listenNetwork string
        监听 '网络'(tcp, tcp4, tcp6, unix)(默认 "tcp")
  -listenUmask int
        Unix 套接字的 Umask
  -logFile string
        日志文件位置
  -logFormat string
        使用的日志格式,默认为文本(text, json, structured, none)(默认 "text")
  -pprofListenAddr string
        pprof 监听地址,例如 'localhost:6060'
  -prometheusListenAddr string
        Prometheus 监听地址,例如 'localhost:9229'
  -propagateCorrelationID X-Request-ID
        如果存在,重用传入请求头 X-Request-ID 中的现有关联 ID
  -proxyHeadersTimeout duration
        代理请求时等待响应头的时间(默认 5m0s)
  -secretPath string
        包含用于与 authBackend 身份验证的密钥的文件(默认 "./.gitlab_workhorse_secret")
  -version
        打印版本并退出

“身份验证后端” 指的是 GitLab Rails 应用。这个名称是历史遗留产物,当时 GitLab Workhorse 只处理 HTTP 的 git pushgit pull 操作。

GitLab Workhorse 可以在 TCP 或 Unix 域套接字上监听。它还可以使用 Go 的 net/http/pprof 分析器服务器打开第二个监听 TCP 套接字。

如果您通过 -config 标志传递有效的 TOML 配置文件,GitLab Workhorse 可以监听 Redis 构建和运行器注册事件。常规设置只需要以下内容(将字符串替换为实际套接字)

Redis

GitLab Workhorse 与 Redis 集成,用于对 CI 构建请求进行长轮询。配置方法:

  • 在 TOML 配置文件中配置 Redis 设置。
  • 使用 -apiCiLongPollingDuration 命令行标志控制 CI 构建请求的轮询行为。

您可以在配置文件中启用 Redis,同时保持 CI 轮询禁用。这种配置会导致空闲的 Redis Pub/Sub 连接。反之则不可能:CI 长轮询需要正确的 Redis 配置。

例如,配置文件中的 [redis] 部分可以包含:

[redis]
URL = "unix:///var/run/gitlab/redis.sock"
Password = "my_awesome_password"
  • URL - 格式为 unix://path/to/redis.sockredis://host:port 的字符串
  • Password - 仅当您的 Redis 实例受密码保护时需要
  • Sentinel - 如果您使用 Sentinel 则需要

如果同时提供 SentinelURL,则只使用 Sentinel

可选字段:

[redis]
DB = 0
MaxIdle = 1
MaxActive = 1
  • DB - 要连接的数据库。默认为 0
  • MaxIdle - Redis 池中可以有多少空闲连接。默认为 1
  • MaxActive - 池可以保持的连接数。默认为 1

相对 URL 支持

如果您将 GitLab 挂载在相对 URL 上,例如 example.com/gitlab,请在 authBackend 设置中使用此相对 URL:

gitlab-workhorse -authBackend http://localhost:8080/gitlab

TLS 支持

可以配置一个带有 TLS 的监听器用于传入请求。必须提供包含服务器证书和匹配私钥的文件路径:

[[listeners]]
network = "tcp"
addr = "localhost:3443"
[listeners.tls]
  certificate = "/path/to/certificate"
  key = "/path/to/private/key"
  min_version = "tls1.2"
  max_version = "tls1.3"

certificate 文件应包含服务器证书、任何中间证书和证书颁发机构证书的串联。

指标端点可以类似地配置:

[metrics_listener]
network = "tcp"
addr = "localhost:9229"
[metrics_listener.tls]
  certificate = "/path/to/certificate"
  key = "/path/to/private/key"
  min_version = "tls1.2"
  max_version = "tls1.3"

Sentinel 支持

[redis]
Sentinel = [ "redis://sentinel1:23456", "redis://sentinel2:23456" ]
SentinelMaster = "mymaster"

Sentinel TLS 支持

[redis]
Sentinel = [ "rediss://sentinel1:23456", "rediss://sentinel2:23456" ]
SentinelMaster = "mymaster"
[Sentinel.tls]
  certificate = "/path/to/certificate"
  key = "/path/to/private/key"
  ca_certificate = "/path/to/ca_certificate" # 可选
  min_version = "tls1.2"                     # 可选
  max_version = "tls1.3"                     # 可选

authBackendauthSocket 的交互

authBackendauthSocket 之间的交互可能会令人困惑。如果设置了 authSocket,它会覆盖 authBackend 的主机部分,但不覆盖相对路径。

表格形式:

authBackend authSocket Workhorse 连接到 Rails 相对 URL
未设置 未设置 localhost:8080 /
http://localhost:3000 未设置 localhost:3000 /
http://localhost:3000/gitlab 未设置 localhost:3000 /gitlab
未设置 /path/to/socket /path/to/socket /
http://localhost:3000 /path/to/socket /path/to/socket /
http://localhost:3000/gitlab /path/to/socket /path/to/socket /gitlab

cableBackendcableSocket 也适用相同的规则。

元数据选项

[metadata] 部分包含以下选项:

设置 类型 默认值 描述
zip_reader_limit_bytes bytes 104857600 (100 MB) 可选的限制 zip reader 的字节数。在 GitLab 16.9 中引入

例如:

[metadata]
zip_reader_limit_bytes = 209715200 # 200 MB

错误跟踪

GitLab-Workhorse 支持 Sentry 的远程错误跟踪。要启用此功能,请设置 GITLAB_WORKHORSE_SENTRY_DSN 环境变量。您还可以设置 GITLAB_WORKHORSE_SENTRY_ENVIRONMENT 环境变量,以使用 Sentry 环境功能来分离暂存、生产和开发环境。

gitlab_workhorse['env'] = {
    'GITLAB_WORKHORSE_SENTRY_DSN' => 'https://foobar'
    'GITLAB_WORKHORSE_SENTRY_ENVIRONMENT' => 'production'
}
export GITLAB_WORKHORSE_SENTRY_DSN='https://foobar'
export GITLAB_WORKHORSE_SENTRY_ENVIRONMENT='production'

分布式跟踪

Workhorse 通过 LabKit 使用 OpenTracing APIs 支持分布式跟踪。

默认情况下,没有跟踪实现链接到二进制文件。您可以使用 构建标签 或通过设置 BUILD_TAGS make 变量来链接不同的 OpenTracing 提供程序。

有关支持的提供程序的更多详细信息,请参阅 LabKit。对于 Jaeger 跟踪支持的示例,包含标签:BUILD_TAGS="tracer_static tracer_static_jaeger",如下所示:

make BUILD_TAGS="tracer_static tracer_static_jaeger"

使用 OpenTracing 提供程序编译 Workhorse 后,使用 GITLAB_TRACING 环境变量配置跟踪配置,如下所示:

GITLAB_TRACING=opentracing://jaeger ./gitlab-workhorse

传播关联 ID

当用户发出 HTTP 请求(例如创建新项目)时,初始请求通过 Workhorse 路由到另一个服务,该服务又可能发出其他请求。为了帮助跟踪请求在服务间的流动,Workhorse 生成一个称为关联 ID的随机值。Workhorse 使用 X-Request-Id HTTP 头发送此关联 ID。

一些 GitLab 服务(如 GitLab Shell)生成自己的关联 ID。此外,其他服务(如 Gitaly)进行内部 API 调用,传递来自原始请求的关联 ID。在任何一种情况下,关联 ID 也通过 X-Request-Id HTTP 头传递。

默认情况下,Workhorse 忽略此头并始终生成新的关联 ID。这使得调试更加困难,并阻止分布式跟踪正常工作,因为新的关联 ID 与原始的完全无关。

可以使用 -propagateCorrelationID 命令行标志将 Workhorse 配置为传播传入的关联 ID。强烈建议将此选项与 IP 允许列表一起使用,以确保不受信任的客户端不能生成任意值。

IP 允许列表在 Workhorse 配置文件中使用 trusted_cidrs_for_propagation 选项指定。指定可以信任的 CIDR 块列表。例如:

trusted_cidrs_for_propagation = ["10.0.0.0/8", "127.0.0.1/32"]

必须使用 -propagateCorrelationID 标志才能使 trusted_cidrs_for_propagation 选项生效。

受信任的代理

如果 Workhorse 位于反向代理(如 NGINX)后面,则需要 trusted_cidrs_for_x_forwarded_for 选项来指定哪些 CIDR 块可用于信任,以使用 X-Forwarded-For HTTP 头提供原始 IP 地址。例如:

trusted_cidrs_for_x_forwarded_for = ["10.0.0.0/8", "127.0.0.1/32"]

持续分析

Workhorse 通过 LabKit 使用 Stackdriver Profiler 支持持续分析。默认情况下,Stackdriver Profiler 实现使用构建标签链接到二进制文件,但这不是必需的,可以跳过。例如:

make BUILD_TAGS=""

使用持续分析编译 Workhorse 后,使用 GITLAB_CONTINUOUS_PROFILING 环境变量设置分析器配置。例如:

GITLAB_CONTINUOUS_PROFILING="stackdriver?service=workhorse&service_version=1.0.1&project_id=test-123 ./gitlab-workhorse"

相关主题