为何GitLab Runner拉取仓库时使用的URL与config.toml中配置的不一致?
问题排查与解决
根因说明
你在config.toml中配置的[[runners]]下的url参数仅用于Runner向GitLab服务端轮询任务、上报运行状态,和任务执行阶段拉取代码的地址无关。
拉取代码的仓库地址由GitLab服务端根据自身配置的external_url参数生成,随任务信息一同返回给Runner,因此会出现访问地址和config.toml配置不一致的情况。你当前遇到的超时错误,是因为Runner的Docker执行环境无法正常访问GitLab返回的公网地址8.136.221.242:8010。
解决方案
方案一(推荐):覆写Runner克隆地址
直接在Runner的config.toml的对应[[runners]]配置块中添加clone_url参数,强制指定拉取代码使用的内网地址:
[[runners]] name = "******" url = "http://172.17.0.3:8010/" clone_url = "http://172.17.0.3:8010/" # 新增这一行 token = "*********" executor = "docker" # 其余原有配置保持不变
配置修改完成后重启GitLab Runner服务即可生效,该方案不会影响公网用户访问GitLab获取克隆地址。
方案二:修改GitLab的external_url配置
如果所有Runner都部署在同一服务器的Docker内网环境中,你可以修改GitLab的配置文件gitlab.rb,将external_url调整为Docker内网地址:
external_url "http://172.17.0.3:8010/"
修改完成后执行gitlab-ctl reconfigure命令生效。注意该方案会导致公网访问GitLab时,页面显示的仓库克隆地址也为内网IP,不适合有外部用户使用GitLab的场景。
方案三:开放公网端口访问
如果服务器安全策略允许,在服务器防火墙和云服务商安全组中放开8010端口的入方向访问规则,Runner即可正常通过公网地址拉取代码。
内容的提问来源于stack exchange,提问作者logicipher
相关产品推荐
相关产品推荐

