Как сделать так, чтобы docker run -v работал на моем локальном gitlab-runner так же, как и на общих GitLab? - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь найти настройки, которые мне нужно добавить в мой собственный хост gitlab-runner, чтобы добиться следующего: В репозитории, содержащем dir/script.py, я запускаю

services:
  - docker:dind

main:
  image: docker:latest
  script:
    - docker run -i -v $(pwd)/dir:/mnt python:3 ls -la /mnt

с общим бегуном GitLab, который показывает, что dir/script.py успешно смонтирован в контейнере и присутствует как /mnt/script.py.

Если я использую свой собственный хост gitlab-runner, каталог будет пустым. Я попытался добавить --privileged к docker run в .gitlab.yml, а также в конфигурации бегуна в /etc/gitlab-runner/config.toml.

Я почти уверен, что смонтированный каталог внутри контейнера пуст, потому что путь монтирования относится к пути на хосте (см. также Docker в Docker не может подключить том ). Тем не менее, кажется, что есть общий способ для бегунов GitLab справиться с этим, и я хочу найти и принять этот способ для моего самостоятельного бегуна.

Я работаю gitlab-runner и предоставляю Docker-in-Докер, запустив блок systemd

[Service]
Type=simple
ExecStartPre=/usr/bin/docker network create --subnet 172.25.0.0/16 gitlab-runner-net
ExecStartPre=/usr/bin/docker run -d --name gitlab-dind --privileged --restart always --network gitlab-runner-net -v /var/lib/docker -e DOCKER_TLS_CERTDIR= docker:19.03-dind --storage-driver=overlay2
ExecStartPre=/usr/bin/docker pull gitlab/gitlab-runner:latest
ExecStart=/usr/bin/docker run --name gitlab-runner --restart always --network gitlab-runner-net --dns 8.8.8.8 -v /srv/gitlab-runner/config:/etc/gitlab-runner -e DOCKER_HOST=tcp://gitlab-dind:2375 gitlab/gitlab-runner:latest
ExecStop=/usr/bin/docker stop gitlab-runner
ExecStop=/usr/bin/docker stop gitlab-dind
ExecStop=/usr/bin/docker rm gitlab-runner
ExecStop=/usr/bin/docker rm gitlab-dind
ExecStop=/usr/bin/docker network rm gitlab-runner-net

(извлечение) и добавив

host = "tcp://gitlab-dind:2375"
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
extra_hosts = ["gitlab-dind:172.25.0.2"]

в каждую секцию бегуна config.toml. Это было вдохновлено https://medium.com/@tonywooster/docker-in-docker-in-gitlab-runners-220caeb708ca. Настройка позволяет использовать docker build внутри .gitlab-ci.yml и совместно использовать кэш Docker между сборками.

Как подключить том в контейнере Dockerв .gitlab-ci.yml? предлагает использовать артефакты, что не вариант, так как я хочу протестировать этот сценарий.

...