web-dev-qa-db-ja.com

パイプラインの実行時にGitLabランナーがホストを解決できない

ドッキングされたGitLabとGitLabRunnerをインストールしており、次のdocker-compose.ymlを使用しています。

version: "3"

services:
  gitlab:
    image: gitlab/gitlab-ee:latest
    container_name: gitlab
    restart: always
    hostname: gitlab
    ports:
      - "45022:22"
      - "45080:80"
      - "45443:443"
    volumes:
      - /srv/gitlab/config:/etc/gitlab
      - /srv/gitlab/logs:/var/log/gitlab
      - /srv/gitlab/data:/var/opt/gitlab

  python-runner:
    image: gitlab/gitlab-runner:latest
    container_name: python-runner
    hostname: python-runner
    volumes:
      - /srv/python-runner/config:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - CI_SERVER_URL=http://gitlab/ci
      - RUNNER_TOKEN=myTokenCode
      - RUNNER_DESCRIPTION=Python 2.7.14
      - RUNNER_EXECUTOR=docker
      - DOCKER_IMAGE=python:2.7.14
    restart: always

ランナーを登録しました:

docker exec -it python-runner gitlab-runner register \
    --non-interactive \
    --url "http://gitlab/" \
    --registration-token "${GITLAB_REGISTRATION_TOKEN}" \
    --description "Python 2.7.14" \
    --executor "docker" \
    --docker-image python:2.7.14

ランナーはランナーリストにリストされています:

enter image description here

python-runnerからgitlabホストにpingを実行できます。

» docker exec -it python-runner bash
root@python-runner:/# ping gitlab
PING gitlab (172.20.0.2) 56(84) bytes of data.
64 bytes from gitlab.gitlab_default (172.20.0.2): icmp_seq=1 ttl=64 time=0.112 ms
64 bytes from gitlab.gitlab_default (172.20.0.2): icmp_seq=2 ttl=64 time=0.055 ms
^C
--- gitlab ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.055/0.083/0.112/0.029 ms

しかし、パイプラインを実行すると、失敗します。

`fatal: unable to access 'http://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@gitlab/group/project.git/': Could not resolve Host: gitlab

これはどのように可能ですか?これはどのように解決できますか?

編集

私が作成しているアーキテクチャは次のようです。

  • gitlabdockerコンテナで実行されているgitlab
  • python-runnerdockerコンテナで実行されているgitlabランナー
  • docker-composeはプライベートネットワークgitlab_defaultgitlabはプロジェクトの名前)を作成し、gitlabコンテナとpython-runnerコンテナの両方がIPによって他のネットワークに到達できますと名前で。
  • python-runnerは、定義されたpython:2.7.14に基づいて、CI中に(ホスト内で?)コンテナを生成するためにdockerエグゼキュータを使用します。 gitlabがこれらのコンテナにどのように名前を付けているのかわかりません。ci-jobと呼びましょう。
  • プロジェクトは、ci-jobを発行することにより、このgit cloneコンテナに複製されます。 ci-jobコンテナがgitlabコンテナに到達できないため、これは失敗します。これは、おそらく別のネットワーク(defaultネットワーク?)にあるためです。

次のようにpython-runnerフラグを使用して、gitlab_defaultが同じ--docker-network-mode gitlab_defaultネットワーク内にコンテナを生成するように強制しようとしました。

docker exec -it python-runner gitlab-runner register \
    --non-interactive \
    --tag-list python-2.7.14 \
    --url "http://gitlab" \
    --registration-token "$(GITLAB_REGISTRATION_TOKEN)" \
    --name "Python 2.7.14" \
    --executor "docker" \
    --docker-image python:2.7.14 \
    --docker-network-mode gitlab_default

しかし、それでも機能しません。 文書化が不十分 であるため、それが正しいフラグかどうかはわかりません。

2つの質問:

  1. CIの実行時にエグゼキュータが作成しているコンテナを確認するにはどうすればよいですか?それらを入力して、そこでデバッグを行うことはできますか?
  2. Dockerエグゼキュータによって生成されたコンテナがgitlabコンテナと同じネットワークにあることを確認するための関連パラメータは何ですか?

EDIT2

しばらくアイドル時間の後、私の仕事は働き始めました。 --docker-network-modeの構成は実際に期待どおりに機能したようです。

8
dangonfast

Gitlab-runnerがホスト名を解決できないという同じ問題がありました。ただし、Debianサーバー(Dockerインストールではない)で実行されているGitlabと、VPNに接続されたGoogleCloudのランナーを使用しています。

私のために働いたのは、次のように、DNSアドレスをランナーconfig.tomlに追加することでした。

  [runners.docker]
    dns = ["dns-1-ip", "dns-2-ip"]
3
Daniel Marklund

同じ問題が発生します(docker-composeベースのセットアップ、Webとランナーの両方が同じネットワークで実行されていますが、executor -CIジョブ-は実行されていません)。で述べたように

https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runnersdocker-section

エグゼキュータコンテナが実行されるDockerネットワークを指定できます。

[runners.docker]
  network_mode = "the_network_docker-compose_created_for_this_project"

これにより、エグゼキュータはhttp://web/からクローンを作成できます。ここで、webはgitlabweb-uiを実行するサービスの名前です。

0
Marcos Modenesi