安装 Gitlab CI 时出现 fatal: Unable to find remote helper for ‘http’ 的解决方式

安装 Gitlab CI 时出现 fatal: Unable to find remote helper for ‘http’ 的解决方式

Chris Yue No Comment
Posts

最近在折腾 Gitlab CI 的时候,遇到的一个奇葩问题。

Gitlab CI 通过 gitlab-ci-multi-runner 来注册 runner,runner 先 git clone 下整个项目代码,然后执行各种 build 过程。

但匪夷所思的是在执行克隆这一步的时候,就开始报错(错误信息见标题),尼玛,真是开门大凶。先冷静,错误信息是 git 报的,应该是 git 有关。

在 Google 上各种查资料后,有一种说法比较靠谱:remote helper 是 git 执行 git clone http://.. 所需要的一个模块,而这个模块坐落在 git-core 目录里(我这 Ubuntu 的在 /usr/lib/git-core),并且这个模块的文件名叫 git-remote-http

为了验证这个说法,试着将 git-remote-http ln -s/usr/local/bin 目录,让 CI 重新跑了一次 build。果然,克隆操作顺利执行。所以网上有一些对这个问题的讨论,说什么是 git 的版本问题、编译时的参数问题,应该都不对。本质原因就是 PATH 里没有 git-core 的路径。

一般来说,如果你遇到标题里的错误,这么解决就没问题了。

而然对于 gitlab-runner 的安装,我虽然给 root 账号 PATH 变量里添加了 git-core 的路径,但是依然报错……尼玛,这又是为什么,git 的问题已经解决了啊,应该是别的原因了。

先保留 git-remote-http 的软连接在 /usr/local/bin,在 Build 配置里添加一些显示环境变量的东西,比如当前运行的用户是谁(whoami 或者 id)和 PATH,发现原来是 root 账号通过 su gitlab-runner 来执行 Gitlab CI runner 的。

原来真正运行的账号不是 root!我再立马给 gitlab-runner 账号的 PATH 变量添加 git-core 路径,这下不会报错了吧?然而……并没有什么卵用…… PATH 变量依然不包含 git-core 目录,我嘞个去这又是怎么回事?

继续 Google 了一大圈,原来跟 su 这个命令有关。在 /etc/logins.defs中,定义了 su 命令使用的默认 PATH 变量……修改了这里的 PATH 变量之后,终于一切正常。回想起折腾的过程,真是不容易啊……

当然,修改这个文件的内容一定不是个 solution,而只是个 workaround,因为这么一改,su 其他用户的时候也会添加这个路径,实际上是不需要的。

2016-7-9 补充:最近给 gitlab 升级之后,发现上面所说的方法也不管用了,我估计是 gitlab 使用了非 su 方式来换了 gitlab-runner 身份。不过以我现在的建议:如果 http(s) 协议的 git 仓库克隆时出现此错误,最靠谱的方式,还是重新再装一下 git,正常情况 git 是不会遇到这种问题的,头痛就医头,别瞎折腾了。

安装 Gitlab CI 时出现 fatal: Unable to find remote helper for ‘http’ 的解决方式 by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

微信赞赏码

文章不错,我要帮站长分担建站费!
天使投赏人

发表评论

1 × = nine