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

GitLab runner unable to clone repository via http

我在测试环境中有 GitLab 运行 的最新 docker 图像,我 运行 遇到了 GitLab runner 的问题。它无法通过 HTTP link 克隆,产生以下消息:

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 并使用了它正在尝试的确切地址(使用完整的令牌),我可以很好地克隆存储库。我不知道为什么该服务无法克隆存储库。 runner 执行器也配置为 'docker'。也许那个容器有一些端口映射问题?

我假设这个问题可能与将 运行ner 注册为 docker 容器有关,导致本地主机地址无法解析到正确的机器(我正在启动 运行纳尔);在这种情况下,它可能改为解析为容器。在 docker 代理接口(我是 172.17.0.1)上使用主机的 IP 或在注册 运行ner 时使用主机的真实地址而不是 "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 地址。因此,如果您希望 运行ner 能够连接到该主机上 运行ning 的服务,则不能将其指向 localhost/127.0.0.1,因为,来自 运行ner 的实例内部,它将路由到 运行ner 的 "VM",但 GitLab 不在 运行ner 的 运行ner [=23] 内部=],它在主机上,所以 运行ner 无法与 GitLab 通信。

解决方法是在docker接口上注册运行ner指向host的虚拟地址(对我来说http://172.17.0.1/ci ),或者使用主机的 public IP 或域名(如果您有并且可以 public 访问)。只是不要将它发送到 localhost 或 127.0.0.1,因为对于 运行ner,它指向它的 "VM",而不是你的 GitLab 实例。

我知道这个问题很老了,但是你可以使用稍微不同的方法(如果你使用 docker runner 来解决同样的问题)。

运行 域名下的Gitlab - 可能是全虚拟的,只要确保你所有的VM都能解析域名即可。

然后修改/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

至于现在(最新版本的 gitlab - 9 及更高版本)你需要使用 https 和适当的 ssl 证书。
一旦您使用 https://... 添加新的跑步者,一切都会正常进行。