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 push 和 git 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.sock或redis://host:port的字符串Password- 仅当您的 Redis 实例受密码保护时需要Sentinel- 如果您使用 Sentinel 则需要
如果同时提供 Sentinel 和 URL,则只使用 Sentinel。
可选字段:
[redis]
DB = 0
MaxIdle = 1
MaxActive = 1DB- 要连接的数据库。默认为0MaxIdle- Redis 池中可以有多少空闲连接。默认为1MaxActive- 池可以保持的连接数。默认为1
相对 URL 支持
如果您将 GitLab 挂载在相对 URL 上,例如 example.com/gitlab,请在 authBackend 设置中使用此相对 URL:
gitlab-workhorse -authBackend http://localhost:8080/gitlabTLS 支持
可以配置一个带有 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" # 可选authBackend 和 authSocket 的交互
authBackend 和 authSocket 之间的交互可能会令人困惑。如果设置了 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 |
cableBackend 和 cableSocket 也适用相同的规则。
元数据选项
在 [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"