我们的 Jenkins 服务器上的 Git 无法解析指向本地网络外部的主机名,因为它是代理(我们的 DMZ)。
当我们只有主节点时,这很好,因为我们的 GitLab 服务器共享相同的代理,因此可以在本地访问,但它会导致新的构建代理不在 DMZ 中并且没有理由被代理的问题,因此需要使用公共 URL 访问我们的 GitLab 服务器。
我尝试检查DNS设置,它们很好。我也尝试使用 dig 查找 GitLab URL,它奏效了。 将 git 与 URL 一起使用适用于其他计算机。
我通过使用命令分隔的主机名模式列表导出环境变量no_proxy
来完成类似的任务。
例如:
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
Git 2.37(2022 年第 3 季度)使用新的http.curloptResolve
配置添加了替代方案:允许基于 cURL 的应用程序对请求使用预先解析的 IP 地址的CURLOPT_RESOLVE
机制向脚本公开。
参见 提交 511cfd3 (2022 年 5 月 16 日) 克里斯蒂安·库德 (chriscool
).
(由 Junio C Hamano 合并 --gitster
-- 在提交 60be293 中,2022 年 5 月 30 日)
http
:将自定义主机名添加到 IP 地址解析签名者:克里斯蒂安·库德
Libcurl 有一个
CURLOPT_RESOLVE
简单的选项,允许传递以下格式的主机名解析结果:[+]HOST:PORT:ADDRESS[,ADDRESS]
这样,重定向和针对主机+端口操作的所有内容都将使用提供的地址。
还允许以下格式停止使用已通过的主机名解析:
-HOST:PORT
有关更多详细信息,请参阅 https://curl.se/libcurl/c/CURLOPT_RESOLVE.html。
让我们添加一个相应的"
http.curloptResolve
"配置选项,以利用CURLOPT_RESOLVE
。为"
http.curloptResolve
"键配置的每个值都按原样传递到libcurlCURLOPT_RESOLVE,
因此它应该采用上述2种格式之一.
这使实现变得简单,并使我们与libcurl的CURLOPT_RESOLVE,
和curl相应的--resolve
命令行选项保持一致。该实现仅在所有 HTTP 请求发送函数调用的
get_active_slot()
中使用CURLOPT_RESOLVE
。
git config
现在在其手册页中包含:
http.curloptResolve
将首先使用的主机名解析信息 libcurl 在发送 HTTP 请求时
此信息应 采用以下格式之一:
[+]HOST:PORT:ADDRESS[,ADDRESS]
-HOST:PORT
跟:
- 第一种格式将所有请求重定向到给定的
HOST:PORT
到提供的ADDRESS
。- 第二种格式清除所有 该
HOST:PORT
组合的先前配置值。自 允许轻松覆盖从 系统配置,空值将重置所有分辨率 信息到空列表。