−Содержание
Быстрый старт GitLab в докер-контейнере на локальной машине
localhost
, пробросив порт 81 => 80 (--publish 81:80
). Но в процессе выяснилось, что в GitLab часть ссылок все равно ведет на 80 порт (http://localhost
), а раннер использует http://localhost
для получения репо.
Поэтому если полностью повторять мой опыт на локалхосте, нужно сделать следующее:
- обязательно освободить 80 порт, иначе будет ошибка, которая показана выше
- добавить в
/etc/hosts
подобную строчку:127.0.1.1 demo-gitlab
Таким образом наш Гитлаб будет развернут локально и доступен по адресу http://demo-gitlab
Поднимаем GitLab Community Edition
Скачиваем образы, это не обязательно, они все равно будут автоматически скачаны:
docker pull gitlab/gitlab-ce docker pull gitlab/gitlab-runner
Для хранения данных, логов и конфигурации будем использовать каталог /var/gitlab
.
Запускаем, мой пример - на локалхосте, порты 443 и 22 я не стал публиковать:
export GITLAB_HOME=/var/gitlab docker run --detach \ --hostname demo-gitlab \ --publish 80:80 \ --name gitlab \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab \ --volume $GITLAB_HOME/logs:/var/log/gitlab \ --volume $GITLAB_HOME/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
Если в системе работает SELinux, то нужно поставить опцию :Z:
--volume $GITLAB_HOME/config:/etc/gitlab:Z \ --volume $GITLAB_HOME/logs:/var/log/gitlab:Z \ --volume $GITLAB_HOME/data:/var/opt/gitlab:Z \
Система заводится не сразу, поэтому смотрим логи:
docker logs -f gitlab
После того как в логах появилось примерно это:
==> /var/log/gitlab/gitlab-rails/production_json.log <==
можно перейти в веб-морду: http://demo-gitlab где попросят ввести пароль пользователя root
docker-compose
, пример
Войти в контейнер при необходимости можно так:
docker exec -it gitlab /bin/bash
А так можно отредактировать настройки:
docker exec -it gitlab editor /etc/gitlab/gitlab.rb
Для применения изменений необходимо перезапустить контейнер:
sudo docker restart gitlab
Бекапирование, обновление, исправление ошибок подробно описаны в официальной документации.
Создаем демо репозиторий
Создаем репозиторий:
demo-gitlab
), localhost
не подойдет, так как раннер запускается в контейнере, и он не сможет получить репо по адресу http://localhost
.
Я создал демо-репо для этих целей, его можно склонировать себе на машину и запушить в этот новый проект:
git clone https://github.com/dbfun/demo.gitlab-demo-ci-cd.git cd demo.gitlab-demo-ci-cd.git git remote add gitlab http://demo-gitlab/root/demo.git git push gitlab
Запускаем GitLab runner в контейнере
Если коротко, то часть команды gitlab-runner
заменяется на docker run [docker options] gitlab/gitlab-runner
, а все остальное остается прежним.
Как сказано в документации, есть два способа использования раннера с помощью докера:
- с монтированием локальной файловой системы
- с монтированием тома (volume)
Это сделано прежде всего для сохранения конфигурации между запусками. Воспользуемся первым способом, конфиг будет находиться в /var/gitlab-runner
:
docker run -d --name gitlab-runner --restart always \ -v /var/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest
Теперь нужно зарегистрировать раннер, это делается так:
Идем в настройки Settings > CI/CD
http://demo-gitlab/root/demo/-/settings/ci_cd где в Runners
указан токен, который нужно использовать для регистрации раннера.
docker run --rm -it -v /var/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
gitlab-ci coordinator URL
использовать не http://localhost/
или http://demo-gitlab/
(не будет резолвиться с ошибкой dial tcp: lookup demo-gitlab on 8.8.8.8:53
), а IP адрес машины, который можно узнать через ip a
После обновления страницы этот раннер будет доступен:
Теперь переходим в CI/CD > Jobs
и видим ошибку - не удалось резолвить наш хост:
Как это исправить написано тут. Я сделал так.
Создаем сеть и цепляем в нее контейнеры:
docker network create gitlab-network
docker network connect --alias demo-gitlab gitlab-network gitlab
docker network connect gitlab-network gitlab-runner
На машине редактируем конфигурацию:
sudo vim /var/gitlab-runner/config/config.toml
добавляем в нужный раннер network_mode
:
[[runners]] ... [runners.docker] network_mode = "gitlab-network"
То же самое можно было сделать с указанием опции --docker-network-mode gitlab_...
при запуске раннера, но я не пробовал.
Теперь смотрим пайплайны, при необходимости - пушим. Демо репо должен выполниться с ошибкой на второй задаче - так это заложено: