В этой статье мы рассмотрим, как развернуть собственный GitLab сервер и GitLab Runners с использованием Docker Compose. Это руководство поможет вам создать локальную среду для изучения и практики GitLab CI/CD. Мы пройдем через все этапы: от настройки контейнеров до регистрации раннеров и создания примера CI/CD пайплайна. Независимо от того, новичок вы в CI/CD или опытный разработчик, этот гайд предоставит вам ценные знания для улучшения вашего процесса разработки.
Важно отметить, что в интернете довольно мало информации о том, как запустить GitLab Runner, который взаимодействует с локальным GitLab сервером. Большинство руководств фокусируются на использовании официального GitLab.com, но для целей обучения и тестирования локальная установка имеет ряд преимуществ.
Во-первых, это позволяет экспериментировать в безопасной среде без риска для реальных проектов. Во-вторых, многие компании используют собственные, часто устаревшие версии GitLab. Имея навыки настройки локального сервера, вы сможете воссоздать среду, идентичную той, что используется в вашей организации, что крайне полезно для отладки и тестирования CI/CD процессов.
Основная часть статьи
Зачем нужен собственный GitLab сервер?
Собственный GitLab сервер позволяет:
Изучить GitLab CI/CD в безопасной среде
Экспериментировать с настройками без риска для производственных систем
Создать тестовую площадку для отработки CI/CD практик
Получить полный контроль над инфраструктурой и данными
Как запустить свой сервер GitLab в контейнере?
1. Подготовка файловой структуры:
mkdir -p ./data/docker/gitlab/{var/opt/gitlab,var/log/gitlab,etc/gitlab-runner,var/run/docker.sock}
mkdir -p ./config
touch ./config/config.toml
2. Запуск Docker Compose:
docker-compose up --build
3. Доступ к веб-интерфейсу GitLab:
URL:
http://localhost:8000/
Логин:
root
Пароль:
CHANGEME123
4. Настройка SSH-ключа:
Перейдите на
http://localhost:8000/-/user_settings/ssh_keys
Добавьте содержимое вашего
~/.ssh/id_rsa.pub
Регистрация GitLab Runner для выполнения задач в Docker
Создайте в одной папке с
docker-compose.yml
файл.env
:
RUNNER_NAME=ИмяПроекта
REGISTRATION_TOKEN=ВашТокенРегистрации
REGISTRATION_TOKEN
- Его можно получить вhttp://localhost:8000/root/${Проект}/-/settings/ci_cd
в разделеRunner's
->Project runners
->:
->Скопировать
Перезапустите сервис
register-runner
:
docker-compose restart register-runner
Управление GitLab Runner
Для выполнения команд войдите в контейнер register-runner
:
# Запуск всех раннеров
gitlab-runner run
# Список раннеров
gitlab-runner list
# Проверка раннеров
gitlab-runner verify
# Удаление всех раннеров
gitlab-runner unregister --all-runners
# Удаление конкретного раннера
gitlab-runner unregister --name ${name_runner}
# Файл с конфигурациями раннеров
vim /etc/gitlab-runner/config.toml
Пример настройки проекта с GitLab CI/CD
Создайте новый проект в GitLab, по имени
test
Зарегистрируйте runner. Как это сделать было написано выше
Клонируйте проект:
git clone ssh://git@localhost:8822/root/test.git
Создайте ветку:
git checkout -b test_ci
Добавьте файл
main.py
:
def main():
print('Hello World')
main()
Создайте файл
.gitlab-ci.yml
:
stages:
- linting
variables:
COMMIT_MESSAGE_PATTERN: "^.{0,10}:[[:space:]]#[0-9]{5,6}[[:space:]].{5,150}$"
.default_rules: &default_rules
rules:
- if: '$CI_COMMIT_BRANCH != "main" && $CI_PIPELINE_SOURCE == "merge_request_event"'
commit-name-test:
stage: linting
<<: *default_rules
script:
- |
if [[ "$CI_COMMIT_MESSAGE" =~ $COMMIT_MESSAGE_PATTERN ]]; then
echo "Корректный формат сообщения коммита"
else
echo "Некорректный формат: $CI_COMMIT_MESSAGE"
exit 1
fi
pylint:
stage: linting
<<: *default_rules
image: python:3.9
before_script:
- pip install pylint
script:
- pylint **/*.py
Закоммитьте изменения:
git add -A && git commit -m "feat: #12345 Добавлен CI пайплайн"
Отправьте изменения:
git push -u origin test_ci
Создайте Merge Request в GitLab
Проверьте выполнение пайплайна на вкладке "Сборочная линия"
Этот гайд поможет вам настроить локальную среду GitLab CI/CD для изучения и экспериментов. Помните, что для продакшен-среды потребуются дополнительные настройки безопасности и производительности.
Комментарии (2)
vasyakrg
25.06.2024 21:33Не хватает только подключенного сюда же регистри. Чтоб не просто катать, но и прикапывать образы
VenbergV
Возможно, что уже все изменилось. Но 2-3 года назад можно было насильно подставлять token регистрации для runner'а. Достаточно его один раз подглядеть.
Вот часть кода из старого сценария.