GitLab Runner 使用 Docker 主机的主机名作为 Git 服务器的 FQDN/主机名

71次阅读
没有评论

问题描述

在使用 GitLab Runner 的 “docker” 执行器时,遇到了以下构建错误:

Running with gitlab-runner 10.7.0 (7c273476)  on main 80500676
Using Docker executor with image centos:latest ...
Pulling docker image centos:latest ...
Using docker image sha256:e934aafc22064b7322c0250f1e32e5ce93b2d19b356f4537f5864bd102e8531f for centos:latest ...
Running on runner-80500676-project-1-concurrent-0 via hostname-of-gitlab-runner-and-gitlab-server...
Cloning repository...
Cloning into '/builds/some-group-name/some-repository-name'...
fatal: unable to access 'http://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@hostname-of-gitlab-runner-and-gitlab-server/some-repository-name/some-repository-name.git/':
Could not resolve host: hostname-of-gitlab-runner-and-gitlab-server
ERROR: Job failed: exit code 1

看起来 GitLab Runner 使用其 Docker 主机的主机名作为从中拉取代码的 Git 服务器的 FQDN 或主机名。这在任何配置文件中都没有定义,这是不合理的。

这是 GitLab 的配置:

$ sudo cat /etc/gitlab-runner/config.toml
concurrent = 1
check_interval = 0

[[runners]]
  name = "main"
  url = "http://127.0.0.1:1337/"
  token = "80500676b5518df3f3f3b1f772e20b"
  executor = "docker"

  [runners.docker]
    tls_verify = false
    image = "ubuntu:latest"
    privileged = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
    #extra_hosts = ["hostname-of-gitlab-runner-and-gitlab-server:actual-fqdn-of-gitlab-server-where-git-repo-is"]

  [runners.cache]

这是 GitLab 服务器配置中与 external_url 相关的配置:

$ sudo egrep '\bexternal_url\b' /etc/gitlab/gitlab.rb
##! For more details on configuring external_url see:
external_url = 'https://server:actual-fqdn-of-gitlab-server-where-git-repo-is'
# gitlab_pages['artifacts_server_url'] = nil # Defaults to external_url + '/api/v4'

这是 GitLab 服务器生成的配置中与 host: 相关的配置:

$ sudo egrep -C 2 -n '^    host: ' /var/opt/gitlab/gitlab-rails/etc/gitlab.yml | head -n 5
-  gitlab:
-    ## Web server settings (note: host is the FQDN, do not include http://)
1:    host: hostname-of-gitlab-runner-and-gitlab-server
2-    port: 80
3-    https: false

当我将 hostname-of-gitlab-runner-and-gitlab-server 更改为 actual-fqdn-of-gitlab-server-where-git-repo-is,并运行 sudo gitlab-ctl reconfigure 时,它会被重置。

如果我在 gitlab.yml/var/opt/gitlab/gitlab-rails/etc/gitlab.yml 目录中编辑 gitlab.host,并在不运行 sudo gitlab-ctl reconfigure 的情况下运行 sudo gitlab-ctl restart,它将保持不变。

一些未解答的问题是:
1. 如何永久设置 gitlab.host 配置值,以便在运行 sudo gitlab-ctl reconfigure 时生成在 /var/opt/gitlab/gitlab-rails/etc/gitlab.yml 中?
2. 为什么 gitlab.yml 中的 gitlab.host 会被设置为 GitLab 服务器的主机名?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

问题的根本原因是在 GitLab 配置文件中使用了错误的赋值语法。正确的方法是使用方法调用语法。

以下是解决问题的步骤:
1. 打开 /etc/gitlab/gitlab.rb 文件。
2. 将 external_url = 'URL_HERE' 更改为 external_url 'URL_HERE'
3. 运行 sudo gitlab-ctl reconfigure

这样做将在 gitlab.yml 文件中设置正确的值,并解决你的问题。

方案2

如果你不想更改 GitLab 配置文件,你可以尝试在 GitLab Runner 的配置文件中添加额外的主机映射。

以下是解决问题的步骤:
1. 打开 /etc/gitlab-runner/config.toml 文件。
2. 在 [runners.docker] 部分的 extra_hosts 属性中添加一个额外的主机映射,将 hostname-of-gitlab-runner-and-gitlab-server 映射到 actual-fqdn-of-gitlab-server-where-git-repo-is
3. 保存文件并重启 GitLab Runner。

这样做将在 GitLab Runner 中添加一个额外的主机映射,以解决你的问题。

请注意,这两种解决方案都需要在修改配置文件后运行相应的命令来使更改生效。

以上是解决你的问题的两种解决方案,请根据你的需求选择适合你的方法。

正文完