Git 无法解析外部主机名



我们的 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组合的先前配置值。

自 允许轻松覆盖从 系统配置,空值将重置所有分辨率 信息到空列表。

最新更新