我们希望把runner拉取代码的地址改为内部地址,但是一直无法生效。

[[runners]]
name = “gitlab-runner-gitlab-runner-69d8c968d7-h8hjt”
output_limit = 20480
url = “http://gitlab-ee.xxxxx.com/
token = “xxxxxxx”
executor = “kubernetes”
clone_url = “http://gitlab-jh-gitlab-ee.gitlab
[runners.custom_build_dir]

Checking for jobs… received job=11480 repo_url=http://gitlab-ee.xx.com/group/subgroup/reponame.git runner=fLfMtsJQ
Job succeeded duration_s=8.145316533999999 job=11480 project=58 runner=fLfMtsJQ
Job succeeded duration_s=85.261961104 job=11483 project=59 runner=fLfMtsJQ
Checking for jobs… received job=11484 repo_url=http://gitlab-ee.xx.com/group/subgroup/reponame.git runner=fLfMtsJQ

这个是kubectl进入runner里的config.toml配置文件内容。

是否还有其他参数需要配置才行?

看你的配置你的gitlab和runner都是部署在k8s中的,然后runner想通过k8s的svc去和gitlab server交互是这个意思吗?

是的,就是这个意思。

是的,就是这个意思,但是这个配置好像并没有生效。

你好,clone_url的作用是在gitlab url无法访问的情况下才会起作用,具体的原理你可以参考官方原文

如果你确定你的gitlab-runner要以svc和gitlab server交互的话,你可以在注册runner时,直接使用svc的地址即可。

我是用helm部署的gitlab和runner,是不是runner里的gitlabUrl参数配置为内部域名就可以了?
为什么我的runner日志里打印的repo_url还是external的地址?
Checking for jobs… received job=11480 repo_url=http://gitlab-ee.xx.com/group/subgroup/reponame.git runner=fLfMtsJQ
Job succeeded duration_s=8.145316533999999 job=11480 project=58 runner=fLfMtsJQ

你好,经过我验证发现,即使你runner注册使用的是svc地址,它在运行job时得到的repo_url依然会是external_url的地址。
如果你依然想用svc拉取代码,可以这么实现:
在gitlab-runner中将gitlab server的url指向一个不存在的地址,这样runner就无法访问url的地址了。
然后在runner的配置文件中将注册的gitlab server url地址和clone_url都改成svc的地址。
这时在运行runner job时,runner的日志依然会打印一条错误日志,类似于:

WARNING: Failed to process runner                   builds=0 error=command terminated with exit code 1 executor=kubernetes runner=y36ydvfq
Checking for jobs... received                       job=26 repo_url=https://gitlab.example.com/gitlab-instance-4819ec88/code.git runner=y36ydvfq

但是经过实测不会影响到代码的拉取,并且构建打包等job可以正常完成。

需要注意:虽然此时实现了runner使用svc与gitlab server进行交互。但是在运行pipeline的环境变量中有关代码仓库的环境变量仓库的url依然是指向的external_url的地址。

然后在runner的配置文件中将注册的gitlab server url地址和clone_url都改成svc的地址。==》这一步我们已经做了。runner的helm里有gitlabUrl和cloneUrl我们改为内部域名了。
在gitlab-runner中将gitlab server的url指向一个不存在的地址,这样runner就无法访问url的地址了。==》我不明白你说的这个指向是在哪里配置的。

你可以通过hostAliases将域名指向一个不存在的ip
直接在gitlab runner的values.yaml中修改:

hostAliases:
  - ip: "169.254.2.1"
    hostnames:
    - "gitlab.example.com"

这样就会将gitlab server的地址指向一个无法访问的ip

hostnames是不是gitlab实例的externalUrl?
我只要用hostAliases改为一个不可用的ip即可对吧?

是的,我这样测试过是可以生效的。具体的你们还要测试一下你们的应用场景能否满足。

非常感谢,我们去尝试下。

对了,我们是在k8s云原生场景下运行整个gitlab CI/CD,我们的runner所在节点和真正的拉起的Pod也不是同一个节点,是不是这个拉取代码的地址改变为内部地址,runner真正启动的CI任务的Pod也会用内部域名去拉取。

是的,因为此时你的gitlab server url访问不到,它只有使用clone_url

好的,已经修改了,runner里helm的值,gitlabUrl这个用原来那个域名,cloneUrl用内部域名对吧?看上去一切正常。
不过runner日志里显示的还是gitlab实例的地址,是不是没有影响?
Checking for jobs… received job=11480 repo_url=http://gitlab-ee.xx.com/group/subgroup/reponame.git runner=fLfMtsJQ

参考上面这一条回答啊,老哥……

你这个我看到了,我只是疑惑的是他显示的repo_url是gitlab实例helm包里的externalUrl.

对的啊,因为external_url是gitlab想要暴露给访问它的客户端的url。