一千萬個為什麽

搜索

GitLab Runner使用其Docker主機的主機名作為Git服務器FQDN /主機名



使用帶有“docker”執行程序的GitLab Runner時,會發生以下構建錯誤:

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:[email protected]/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
11-  gitlab:
12-    ## Web server settings (note: host is the FQDN, do not include http://)
13:    host: hostname-of-gitlab-runner-and-gitlab-server
14-    port: 80
15-    https: false

當我將 hostname-of-gitlab-runner-and-gitlab-server 更改為 actual-fqdn-of-gitlab-server-where-git-repo-is 時,運行 sudo gitlab-ctl reconfigure ,它會被重置。

如果我在 /var/opt/gitlab/gitlab-rails/etc/gitlab.yml 目錄中編輯 gitlab.host ,並運行 sudo gitlab-ctl restart 沒有運行 sudo gitlab-ctl reconfigure ,它將保持不變。

一些懸而未決的問題是:

  1. 如何永久設置 gitlab.host 配置值 在 /var/opt/gitlab/gitlab-rails/etc/gitlab.yml 中生成 運行 sudo gitlab-ctl reconfigure

  2. 為什麽 gitlab.host in gitlab.yml 繼續設置為GitLab服務器的主機名?

轉載註明原文: GitLab Runner使用其Docker主機的主機名作為Git服務器FQDN /主機名

一共有 1 個回答:

Neil,這是因為你的 /etc/gitlab/gitlab.rb 文件中的 = 符號。

當您在 external_url 行之前查看完整註釋時,您將看到文檔的鏈接:

## GitLab URL
##! URL on which GitLab will be reachable.
##! For more details on configuring external_url see:
##! https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab
external_url 'http://gitlab.example.com'

在默認的 gitlab.rb 文件中(剛安裝Omnibus GitLab軟件包之後)以及鏈接文檔中可以看到, external_url 值是在沒有 = 標誌。它是這樣做的,因為 external_url 是一個方法,而不是一個變量。所以這裏你沒有賦值,而是用這個值調用方法。 Ruby允許在參數周圍調用一個沒有括號的方法,這是設計基於Ruby的DSL時常用的模式。

當您嘗試使用以下值設置值時:

external_url = 'https://server:actual-fqdn-of-gitlab-server-where-git-repo-is'

然後 external_url 方法沒有接收任何參數,在這種情況下,Omnibus GitLab回退到一個默認值,該默認值基於主機的 hostname

在大多數情況下,安裝GitLab的服務器的主機名將與服務器可訪問的主機名相同。在某些情況下 - 包括你的 - 需要明確設置 external_url

所以解決方案似乎是:

  1. Change external_url = 'URL_HERE' to external_url 'URL_HERE'
  2. Execute sudo gitlab-ctl reconfigure

這應該在 gitlab.yml 文件中設置正確的值並解決您的問題。