В этой статье мы рассмотрим, как развернуть собственный GitLab сервер и GitLab Runners с использованием Docker Compose. Это руководство поможет вам создать локальную среду для изучения и практики GitLab CI/CD. Мы пройдем через все этапы: от настройки контейнеров до регистрации раннеров и создания примера CI/CD пайплайна. Независимо от того, новичок вы в CI/CD или опытный разработчик, этот гайд предоставит вам ценные знания для улучшения вашего процесса разработки.

Важно отметить, что в интернете довольно мало информации о том, как запустить GitLab Runner, который взаимодействует с локальным GitLab сервером. Большинство руководств фокусируются на использовании официального GitLab.com, но для целей обучения и тестирования локальная установка имеет ряд преимуществ.

Во-первых, это позволяет экспериментировать в безопасной среде без риска для реальных проектов. Во-вторых, многие компании используют собственные, часто устаревшие версии GitLab. Имея навыки настройки локального сервера, вы сможете воссоздать среду, идентичную той, что используется в вашей организации, что крайне полезно для отладки и тестирования CI/CD процессов.

Основная часть статьи

Зачем нужен собственный GitLab сервер?

Собственный GitLab сервер позволяет:

  1. Изучить GitLab CI/CD в безопасной среде

  2. Экспериментировать с настройками без риска для производственных систем

  3. Создать тестовую площадку для отработки CI/CD практик

  4. Получить полный контроль над инфраструктурой и данными

Как запустить свой сервер 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.yml

docker-compose up --build

3. Доступ к веб-интерфейсу GitLab:

  • URL: http://localhost:8000/

  • Логин: root

  • Пароль: CHANGEME123

4. Настройка SSH-ключа:

  1. Перейдите на http://localhost:8000/-/user_settings/ssh_keys

  2. Добавьте содержимое вашего ~/.ssh/id_rsa.pub

Регистрация GitLab Runner для выполнения задач в Docker

  1. Создайте в одной папке с docker-compose.yml файл .env:

RUNNER_NAME=ИмяПроекта
REGISTRATION_TOKEN=ВашТокенРегистрации

REGISTRATION_TOKEN - Его можно получить в http://localhost:8000/root/${Проект}/-/settings/ci_cd в разделе Runner's-> Project runners -> : -> Скопировать

  1. Перезапустите сервис 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

  1. Создайте новый проект в GitLab, по имени test

  2. Зарегистрируйте runner. Как это сделать было написано выше

  3. Клонируйте проект: git clone ssh://git@localhost:8822/root/test.git

  4. Создайте ветку: git checkout -b test_ci

  5. Добавьте файл main.py:

def main():
    print('Hello World')

main()
  1. Создайте файл .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
  1. Закоммитьте изменения: git add -A && git commit -m "feat: #12345 Добавлен CI пайплайн"

  2. Отправьте изменения: git push -u origin test_ci

  3. Создайте Merge Request в GitLab

  4. Проверьте выполнение пайплайна на вкладке "Сборочная линия"

Этот гайд поможет вам настроить локальную среду GitLab CI/CD для изучения и экспериментов. Помните, что для продакшен-среды потребуются дополнительные настройки безопасности и производительности.

Комментарии (2)


  1. VenbergV
    25.06.2024 21:33

    Возможно, что уже все изменилось. Но 2-3 года назад можно было насильно подставлять token регистрации для runner'а. Достаточно его один раз подглядеть.
    Вот часть кода из старого сценария.

    - name: modify runner token
      lineinfile:
        path: /etc/gitlab/gitlab.rb
        line: "gitlab_rails['initial_shared_runners_registration_token'] = '{{ my_gitlab_runner }}'"
    
    - name: modify root password
      lineinfile:
        path: /etc/gitlab/gitlab.rb
        line: "gitlab_rails['initial_root_password'] = '{{ my_gitlab_psw }}'"
    
    # Start and configure GitLab. Sometimes the first run fails, but after that,
    # restarts fix problems, so ignore failures on this run.
    - name: Reconfigure GitLab (first run).
      command: >
        gitlab-ctl reconfigure
        creates=/var/opt/gitlab/bootstrapped
      failed_when: false


  1. vasyakrg
    25.06.2024 21:33

    Не хватает только подключенного сюда же регистри. Чтоб не просто катать, но и прикапывать образы