GitLab runner 无法通过 http 克隆存储库

Posted

技术标签:

【中文标题】GitLab runner 无法通过 http 克隆存储库【英文标题】:GitLab runner unable to clone repository via http 【发布时间】:2016-03-04 08:30:23 【问题描述】:

我在测试环境中运行了 GitLab 的最新 docker 映像,但我遇到了 GitLab 运行器的问题。它无法通过 HTTP 链接进行克隆,产生以下消息:

Running on runner-bd27e50b-project-1-concurrent-0 via machine...
Cloning repository...
Cloning into '/builds/my/awesome-project'...
fatal: unable to access 'http://gitlab-ci-token:xxxxxx@127.0.0.1/my/awesome-project.git/': 
    Failed to connect to 127.0.0.1 port 80: Connection refused

ERROR: Build failed with: exit code 1

我使用--debug 标志运行 gitlab-runner 并使用它正在尝试的确切地址(使用正确的令牌),我可以很好地克隆存储库。我不知道为什么该服务无法克隆存储库。运行程序执行程序也配置为“docker”。也许该容器存在一些端口映射问题?

【问题讨论】:

我在旧的 CentOS 6.6 机器上遇到了同样的问题。升级nss curl libcurl,解决问题。似乎提到了同样的问题here 【参考方案1】:

就目前而言(最新版本的 gitlab - 9 及更高版本)您需要使用带有适当 ssl 证书的 https。 只要您使用 https://... 添加新的跑步者,一切都应该可以正常工作。

【讨论】:

【参考方案2】:

我知道这个问题已经很老了,但是您可以使用稍微不同的方法(如果您使用 docker runner 遇到同样的问题)。

在域名下运行 Gitlab - 它可能是完全虚拟的,只要确保你所有的虚拟机都可以解析域名。

然后修改/etc/gitlab-runner/config.toml并将extra_hosts变量添加到[runners.docker]部分,值为["your_domain_name:ip_address"]。您还可以添加您可能需要的任何其他主机。

您可以在以下位置找到有关运行器配置的更多信息 https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md

【讨论】:

通常privileged = truevolumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"] 在同一部分对构建图像也很有用【参考方案3】:

我假设这个问题可能与将运行器注册为 docker 容器有关,导致 localhost 地址无法解析到正确的机器(我正在启动运行器);在这种情况下,它可能会解析为容器。在 docker 代理接口上使用主机的 IP(对我来说是 172.17.0.1)或者在注册 runner 时使用主机的真实地址而不是“localhost”可以解决问题。

编辑:这是我理解的问题和解决方案的更多细节。加载的 docker 实例就像一个(非常)轻量级的虚拟机。 Docker 配置了一个虚拟网络接口,如果您从主机运行 ifconfig,您将看到它:

user@pc:~> ifconfig
docker0   Link encap:Ethernet  HWaddr XXXX
          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0
          ...

这是该接口上主机的 IP 地址。因此,如果您希望运行器能够连接到该主机上运行的服务,则不能将其指向 localhost/127.0.0.1,因为来自运行器实例内部的它将路由到运行器的 " VM”,但 GitLab 并未在该运行程序“VM”内运行,它在主机上,因此运行程序无法与 GitLab 通信。

解决方案是注册运行器以指向 docker 接口上的 host 的 虚拟地址(对我来说是http://172.17.0.1/ci),或者使用主机的公共 IP 或域名(如果有)一个,它可以公开访问。只是不要将它发送到 localhost 或 127.0.0.1,因为对于跑步者来说,它指向它的“VM”,而不是你的 GitLab 实例。

【讨论】:

我遇到了同样的问题。你能扩展你的答案吗?你到底是怎么改正的? @Onlyjus 我添加了更多解释,希望对您有所帮助。 TL;DR:注册您的跑步者以指向您在 docker 虚拟网络适配器上的主机 IP。 完美解释!非常感谢! 我遇到了同样的问题。我只是将 gitlab.rb 配置中的 external_url 变量设置为指向 172.17.0.1(默认 Docker 网关)并摆脱了端口 80 错误上的连接被拒绝

以上是关于GitLab runner 无法通过 http 克隆存储库的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab-runner 无法执行第二份工作

由于禁止的秘密访问规则,无法在 gitlab-runner 中使用 helm upgrade

Gitlab CI runner 无法暴露嵌套 Docker 容器的端口

无法在 Kubernetes 集群中执行 GitLab Runner:无法在命名空间“gitlab”中的 API 组“”中创建资源“秘密”

WIndows Gitlab-runner:无法重新排队跑步者

Gitlab-runner 安装和配置