GitLab Runner与GitLab外部URL端口不匹配致流水线作业失败求解决方案
解决GitLab Runner流水线提示端口80仓库未找到的问题
问题根源
GitLab的external_url配置为80端口,但实际服务运行在82端口。Runner注册时虽然用了82端口的地址,但流水线执行时,GitLab会基于external_url生成仓库克隆地址并下发给Runner,导致Runner尝试访问未提供服务的80端口,最终报错。
可行解决方案
方案1:修正GitLab的external_url配置(推荐)
- 编辑GitLab主配置文件:
sudo vi /etc/gitlab/gitlab.rb - 修改
external_url为实际服务地址:external_url "http://git.ideep.apasaico.local:82" - 重新配置并重启GitLab服务:
此方案让GitLab直接下发正确的带82端口的克隆地址,从根源解决问题。sudo gitlab-ctl reconfigure sudo gitlab-ctl restart
方案2:在Runner主机配置端口转发
在Runner主机(101.987.654.321)上通过iptables将80端口请求转发至82端口:
# 添加转发规则 sudo iptables -t nat -A PREROUTING -d 123.456.789.101 -p tcp --dport 80 -j REDIRECT --to-port 82 # 保存规则,确保重启后生效 sudo iptables-save | sudo tee /etc/iptables/rules.v4
如果使用ufw防火墙,可替换为:
sudo ufw allow 80/tcp sudo ufw route add redirect proto tcp from any to 123.456.789.101 port 80 to 123.456.789.101 port 82
此方案无需修改GitLab配置,通过端口转发兼容旧的80端口请求。
方案3:修改Runner配置强制指定克隆地址
- 编辑Runner配置文件:
sudo vi /etc/gitlab-runner/config.toml - 在对应Runner的
[[runners]]段落中添加clone_url字段:[[runners]] name = "你的Runner名称" url = "http://git.ideep.apasaico.local:82/" token = "你的Runner令牌" executor = "shell" # 根据实际执行器修改,如docker、kubernetes等 clone_url = "http://git.ideep.apasaico.local:82/" - 重启GitLab Runner服务:
此方案让Runner忽略GitLab下发的克隆地址,强制使用指定的82端口地址拉取代码。sudo gitlab-runner restart
内容的提问来源于stack exchange,提问作者reza malekee
相关产品推荐
相关产品推荐

