GitLab
| Разработчик | GitLab Inc. |
|---|---|
| Авторы | Дмитрий Запорожец, Валерий Сизов |
| Первый выпуск | 2011 |
| Язык | Ruby (Rails), Go, Vue.js |
| Редакции | Community Edition (MIT), Enterprise Edition (Premium, Ultimate) |
| Варианты | GitLab.com, Self-Managed, Dedicated |
| Выпуски | ежемесячно, 3-го четверга |
| Конкуренты | GitHub, Bitbucket, Gitea/Forgejo |
GitLab — платформа для совместной разработки программ на основе Git. В одном продукте собраны хостинг репозиториев, merge requests и код-ревью, задачи и доски, встроенный CI/CD, реестры контейнеров и пакетов, вики, управление окружениями и инструменты безопасности. Главное отличие от GitHub — исторически сильная версия для установки на собственные серверы, благодаря чему GitLab широко распространён в компаниях, которым важно держать код внутри своей инфраструктуры.
История
Проект начали в 2011 году украинские программисты Дмитрий Запорожец и Валерий Сизов как открытую альтернативу GitHub для установки у себя.[2] В 2014 году была основана компания GitLab Inc. под руководством Сида Сейбрандея. В 2015-м CI-система GitLab CI была встроена в основной продукт — одна из ранних платформ «всё в одном». В 2018 году, после покупки GitHub компанией Microsoft, на GitLab переехали сотни тысяч репозиториев. В 2021 году компания вышла на биржу NASDAQ. GitLab известен полностью удалённой работой и публичным справочником компании (handbook).
Редакции и варианты
| Вариант | Где работает | Кому |
|---|---|---|
| GitLab.com | облако GitLab Inc. | командам без своей инфраструктуры |
| Self-Managed | ваши серверы или облако | компаниям с требованиями к размещению данных |
| Dedicated | выделенный экземпляр в облаке | крупным организациям |
Код распространяется в двух редакциях: Community Edition под лицензией MIT и Enterprise Edition с платными уровнями Premium и Ultimate (расширенное ревью, безопасность, портфельное планирование).[6] Бесплатный уровень включает репозитории, merge requests, CI/CD и реестры.
Основные возможности
- Группы и проекты — иерархия групп и подгрупп с наследованием прав и настроек; удобно для большой организации.
- Merge requests — аналог pull request на GitHub: обсуждение по строкам, обязательные одобрения, правила защиты веток, слияние после успешного конвейера (см. Pull request / Merge request).[4]
- Задачи (issues) — метки, вехи (milestones), доски Kanban, эпики; связь коммитов и MR с задачами по ссылкам
#123. - CI/CD — конвейеры описываются в
.gitlab-ci.yml, задачи выполняет GitLab Runner на своих машинах, в Docker или Kubernetes. - Реестры — встроенный Container registry (
registry.gitlab.com), реестры пакетов (npm, PyPI, Maven, Go), хранилище Helm-чартов и состояний Terraform.[5] - Окружения и деплой — история выкладок по окружениям, ревью-окружения для каждой ветки, интеграция с Kubernetes через агента.
- Безопасность (часть функций — в Ultimate) — SAST, сканирование зависимостей и контейнеров, поиск секретов, отчёты прямо в MR.
Установка на свой сервер
Самый распространённый способ — пакет Omnibus, включающий все компоненты (Rails-приложение, Gitaly, PostgreSQL, Redis, nginx, Prometheus):[3]
# Ubuntu / Debian
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
sudo EXTERNAL_URL="https://gitlab.example.com" apt install gitlab-ee
sudo gitlab-ctl reconfigure
sudo gitlab-ctl status
Альтернативы — образ Docker, Helm-чарт или оператор для Kubernetes. Для небольшой команды нужен сервер минимум с 4 ядрами и 8 ГБ памяти; конфигурация хранится в /etc/gitlab/gitlab.rb, резервная копия создаётся командой gitlab-backup create (секреты из /etc/gitlab копируются отдельно). Обновлять стоит регулярно и по рекомендуемому пути версий — GitLab выходит каждый месяц.
GitLab и GitHub
| GitLab | GitHub | |
|---|---|---|
| Своя установка | CE бесплатно, полноценная | GitHub Enterprise Server, платно |
| CI/CD | встроен с 2015, единый .gitlab-ci.yml |
GitHub Actions, большой маркетплейс |
| Организация | вложенные группы | организации и команды |
| Сообщество open source | меньше | крупнейшее |
| Терминология | merge request | pull request |
Для лёгкой собственной установки без CI-нагрузки также используют Gitea и её форк Forgejo — они требуют в десятки раз меньше ресурсов.
Практика
git remote add origin git@gitlab.com:group/project.git
git push -u origin main
# создать MR при пуше через push options
git push -o merge_request.create -o merge_request.target=main
Командная утилита glab позволяет работать с MR, задачами и конвейерами из терминала, аналогично gh для GitHub.