GitLab — это опенсорсный сервис для хранения и управления Git-репозиториями. Он предоставляет разработчикам централизованное место для хранения кода, позволяя эффективно работать над общими проектами, сливая ветки со своими изменениями и подтягивая изменения коллег.
Основные функции
GitLab предлагает стандартный набор функций для работы с репозиториями: создание репозиториев и веток, выполнение операций с ветками, редактирование кода и управление доступом. Ключевое отличие GitLab от GitHub — гибкость развертывания. В отличие от облачного GitHub, GitLab может работать как в облаке, так и на собственных серверах (on-premise), что особенно привлекательно для крупных компаний, желающих сохранить контроль над своим кодом и данными.
Расширенные возможности
Помимо базовых функций, GitLab предлагает:
- Merge Requests: Обеспечивают код ревью, позволяя просматривать изменения, назначать ревьюеров, оставлять комментарии и утверждать изменения перед слиянием веток.
- Система управления задачами: Организует работу над проектом в одном месте.
- Интеграции: Обеспечивает взаимодействие с сервисами, такими как Slack или Jira.
- CI/CD: Автоматизирует сборку, тестирование и развёртывание кода. Залив кода в репозиторий запускает автоматическое прохождение тестов, сборку и развёртывание на целевом сервере.
GitLab CI/CD
GitLab CI/CD — встроенный инструмент непрерывной интеграции и непрерывной доставки (CI/CD). Он включает:
- GitLab Server: Хранит репозитории с кодом и конфигурацию пайплайнов.
- GitLab Runners: Отдельные серверы, на которых выполняется работа, описанная в пайплайне. Runners могут быть развернуты на различных операционных системах и в разных средах (сервер, Docker-контейнер, облако). В облачном решении все серверы уже настроены. В случае самостоятельного развертывания потребуется установить и зарегистрировать Runner на GitLab Server.
Настройка пайплайнов
Пайплайны описываются в файле .gitlab-ci.yml, расположенном в репозитории. Этот файл содержит описание этапов (jobs), выполняемых последовательно или параллельно. Используется декларативный стиль описания.
Каждый job содержит:
- Название: Уникальное имя для каждого этапа.
- script: Список команд, выполняемых на Runner (например, установка зависимостей, запуск тестов, вывод сообщений).
GitLab автоматически подтягивает пайплайны из .gitlab-ci.yml при каждом пуше в репозиторий. Джобы могут выполняться параллельно. В случае ошибки, этап помечается как неудачный, и подробности отображаются в логах. Для организации последовательного выполнения этапов используются stages. Это позволяет сгруппировать джобы логически (например, сначала тесты, затем — развёртывание). Атрибут when: manual позволяет запускать джобы вручную.
Переменные и правила
GitLab поддерживает различные типы переменных:
- Секретные переменные: Хранятся в настройках проекта и доступны только пользователям с необходимыми правами. В .gitlab-ci.yml отображаются только их имена.
- Обычные переменные: Задаются в блоке variables и доступны в пределах указанной области видимости.
- Предопределенные переменные: Доступны без дополнительной настройки (например, имя ветки, имя комита).
Блок rules позволяет задавать условия выполнения джоб (например, запуск тестов только при пуше в main ветку).
Использование Docker
GitLab позволяет запускать джобы в изолированных Docker-контейнерах, что обеспечивает повторяемость и изоляцию окружения. Для этого используется атрибут image с указанием имени и тега образа с Docker Hub. Дополнительные контейнеры можно указать в блоке services.
GitFlic: Российская альтернатива
Российская альтернатива GitLab и GitHub — платформа GitFlic. Она предлагает аналогичные функции, включая реестры пакетов и контейнеров, интеграцию с Yandex.Cloud, поддержку S3 и распределённый координатор для CI/CD. Бесплатный доступ предоставляется командам до 5 человек.
GitLab — мощный и гибкий инструмент для управления версиями кода и автоматизации процессов CI/CD. Его возможности позволяют эффективно организовать работу над проектами различной сложности, как в облачной, так и в on-premise среде.