Gitlab CE / Runner в Docker под VPN
При установке Gitlab для работы под VPN возникает ряд проблем со связностью обработчиков задач CI/CD и основного сервера Gitlab. В частности, обработчики без дополнительного конфигурирования используют HTTP протокол для клонирования, а также не видят ни VPN зону, ни зону docker-сети Gitlab.
Для решения данной задачи можно попробовать перевести HTTP-клонирование на SSH, если он доступен в Интернет, можно пробросить VPN-зону внутрь контейнера-песочницы, но простейшее решение для данного случая - это прокинуть Docker-сеть Gitlab в контейнер-песочницу создаваемую обработчиком задач Gitlab Runner, для этого достаточно добавить несколько строк в конфигурацию Gitlab Runner.
Первичные условия
- docker-сеть: например, "gitlab_network", в этой сети доступен контейнер основного портала Gitlab CE
- контейнер Gitlab CE: например, "gitlab_server"
Пример файла конфигурации Gitlab Runner config.toml
concurrent = 1
check_interval = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "Shared runner"
clone_url = "http://gitlab_server"
url = "http://gitlab_server/"
token = "12345678900987654321"
executor = "docker"
[runners.docker]
network_mode = "gitlab_network"
tls_verify = false
image = "alpine"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
В этой конфигурации отметим следующие поля:
- clone_url, url, network_mode - решают вышепоставленную проблему
- image - позволяет ускорить процесс разворачивания кода в разы
В случае использования данного примера методом copy&paste, не забудьте обновить токен доступа к Gitlab CE. Для этого запустите оболочку внутри контейнера Gitlab Runner и исполните команду gitlab-runner register
.