Action disabled: revisions

Быстрый старт 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, а все остальное остается прежним.

Как сказано в документации, есть два способа использования раннера с помощью докера:

  1. с монтированием локальной файловой системы
  2. с монтированием тома (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
Так как эксперимент проходит на localhost, при регистрации раннера следует gitlab-ci coordinator URL использовать не http://localhost/ или http://demo-gitlab/ (не будет резолвиться с ошибкой dial tcp: lookup demo-gitlab on 8.8.8.8:53), а IP адрес машины, который можно узнать через ip a
В качестве образа можно использовать что-то более функциональное, нежели apline, например bash или debian

После обновления страницы этот раннер будет доступен:

Теперь переходим в 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_... при запуске раннера, но я не пробовал.

Теперь смотрим пайплайны, при необходимости - пушим. Демо репо должен выполниться с ошибкой на второй задаче - так это заложено:

Ссылки

Печать/экспорт