ドッキングされた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
ランナーはランナーリストにリストされています:
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
これはどのように可能ですか?これはどのように解決できますか?
私が作成しているアーキテクチャは次のようです。
gitlab
dockerコンテナで実行されているgitlabpython-runner
dockerコンテナで実行されているgitlabランナーgitlab_default
(gitlab
はプロジェクトの名前)を作成し、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つの質問:
gitlab
コンテナと同じネットワークにあることを確認するための関連パラメータは何ですか?しばらくアイドル時間の後、私の仕事は働き始めました。 --docker-network-mode
の構成は実際に期待どおりに機能したようです。
Gitlab-runnerがホスト名を解決できないという同じ問題がありました。ただし、Debianサーバー(Dockerインストールではない)で実行されているGitlabと、VPNに接続されたGoogleCloudのランナーを使用しています。
私のために働いたのは、次のように、DNSアドレスをランナーconfig.tomlに追加することでした。
[runners.docker]
dns = ["dns-1-ip", "dns-2-ip"]
同じ問題が発生します(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を実行するサービスの名前です。