Jenkins服务器上Git无法解析本地网络外外部主机名问题求助
Jenkins跨节点Git访问公网GitLab故障排查方案
排查步骤
第一步:校验构建节点的Git代理配置
登录故障构建代理节点,切换至Jenkins运行任务的服务账号(禁止直接用root账号排查,两者配置相互隔离),执行
git config --list --show-origin查看系统、全局、用户三个层级的Git配置:- 若存在
http.proxy/https.proxy配置指向DMZ内部代理,执行对应层级的移除命令即可,例:- 移除用户级代理:
git config --unset --global http.proxy - 移除系统级代理:
git config --unset --system http.proxy
- 移除用户级代理:
- 同时检查是否存在
insteadOf规则强制替换公网GitLab地址为内网地址,执行git config --get-regexp insteadOf验证,存在的话用git config --unset删除对应规则即可。
- 若存在
第二步:校验Jenkins代理注入配置
Jenkins全局代理会默认注入到所有构建节点的任务环境变量,需从两个维度排查:
- 进入Jenkins管理后台→系统配置→代理设置,确认是否勾选了为构建代理应用全局代理选项,若勾选可直接取消,或在对应构建节点的独立配置页添加
NO_PROXY环境变量,值设置为GitLab公网域名,避免该域名被强制走内部代理。 - 检查故障任务的单独配置,确认Git仓库地址为公网URL,未填写DMZ内网地址,且任务级未配置强制代理规则。
- 进入Jenkins管理后台→系统配置→代理设置,确认是否勾选了为构建代理应用全局代理选项,若勾选可直接取消,或在对应构建节点的独立配置页添加
第三步:验证任务运行时实际环境
在故障代理节点上新建一个测试自由风格任务,仅执行以下命令输出运行时参数,对比你手动排查的结果是否一致:
# 输出当前运行账号 whoami # 输出所有代理相关环境变量 env | grep -i proxy # 输出当前账号生效的Git配置 git config --list # 测试网络连通性 curl -v [你的GitLab公网访问地址] # 测试Git克隆 git clone -v [你的GitLab测试公网仓库地址]若任务执行输出的代理配置和你手动排查结果不一致,说明Jenkins在任务启动阶段注入了额外的代理变量,回到节点配置页清空任务级环境变量即可。
第四步:排查底层域名解析规则
确认
/etc/hosts文件内未写死GitLab域名对应的内网IP,导致DNS解析被覆盖返回错误地址。
内容的提问来源于stack exchange,提问作者Pontus Lian
相关产品推荐
相关产品推荐

