Gitlabs CI Runner无法解析主机名

Pat*_*k T 5 dns continuous-integration gitlab gitlab-ci-runner

我按照本指南创建了一个特定的运行程序:使用官方GitLab存储库(Linux)进行安装.我能够在我们公司的GitLab中成功注册跑步者.

我还为我们的gradle项目提供了一个.gitlab-ci.yml.基本上它就像这样简单:

image: java:8-jdk

before_script:
  - export GRADLE_USER_HOME=`pwd`/.gradle

build:
  stage: build
  script:
    - ./gradlew assemble

test:
  stage: test
  script:
    - ./gradlew check
Run Code Online (Sandbox Code Playgroud)

一旦GitLab看到这个文件就开始运行一个构建但是失败了:

$ ./gradlew assemble
Downloading https://services.gradle.org/distributions/gradle-2.12-bin.zip

Exception in thread "main" java.net.UnknownHostException: services.gradle.org
Run Code Online (Sandbox Code Playgroud)

我通过更新本地/etc/gitlab-runner/config.toml中extra_hosts解决了这个问题:

  [runners.docker]
    tls_verify = false
    image = "ruby:2.1"
    privileged = false
    disable_cache = false
    volumes = ["/cache"]
    extra_hosts = ["git.my.company.com:xxx.xxx.xxx.xxx","services.gradle.org:207.223.250.8","downloads.gradle.org:54.240.162.161","repo1.maven.org:151.101.36.209"]
  [runners.cache]
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我必须为构建期间使用的每个主机名执行此操作.现在我可以使用GitLab CI运行构建,但我必须提供这种繁琐的设置.我宁愿看到跑者从DNS中提取IP地址.

有没有人遇到过同样的问题?有没有已知的解决方案?

提前致谢

编辑

我可以将DNS设置添加到跑步者配置中,如下所示:

[runners.docker]
    tls_verify = false
    image = "ruby:2.1"
    privileged = false
    disable_cache = false
    volumes = ["/cache"]
    dns = ["<my company's DNS IP>"]
Run Code Online (Sandbox Code Playgroud)

我仍然想知道为什么我需要这些设置.我的意思是跑步者正在运行的系统也知道如何解决没有进一步配置的主机名.