Сегодня тяжело представить серьезную разработку без использования системы контроля версий. Тем более что в Сети достаточно сервисов, предоставляющих такую возможность с большим числом полезных дополнений. Но когда проект разрастается, становится очевидным, что возможности бесплатных аккаунтов сильно ограничены, в первую очередь количество приватных репозиториев. И хочется большего контроля над репозиторием, ведь код — это все, что есть у бизнеса. Значит, пришло время разворачивать свой сервис.
 

Проект GitLab

Несмотря на то что Git уже больше двенадцати лет, толковых проектов, реализующих серверную часть, практически нет. Конечно, можно организовать репозиторий для хранения кода с использованием стандартных инструментов SSH и HTTP плюс установить интерфейс GitWeb, средство управления аккаунтами Gitolite, но вряд ли после GitHub или Bitbucket он покажется функциональным, а управление несколькими инструментами — удобным и понятным. Разработчики будут бунтовать.

GitLab — решение, предоставляющее возможности создания репозитория на своем сервере, не уступающие по функциям GitHub. Интерфейс даже в чем-то похож на GitHub, хотя и не совсем его копирует, но все удачные находки там присутствуют. Основан в 2011 году харьковчанином Дмитрием Запорожцем, который пытался найти аналог сервиса GitHub с доступными ценами и в итоге написал его сам. Решение быстро начало набирать популярность, так как он удобней для командной работы, а новые функции появлялись постоянно, и разработчики реагировали на потребности пользователей. Позже была образована GitLab Inc. Анонс в стартап-акселератор Y Combinator оказался удачным, и команда получила финансирование. Сегодня в проект инвестировано более 25 миллионов долларов, а сам Дмитрий Запорожец попал в Forbes 30 до 30 лет в категории Enterprise Tech. В компании работает более 150 разработчиков из 37 стран, кроме того, часть изменений предлагает комьюнити. GitLab использует более 100 тысяч компаний, в том числе NASA, AT&T, IBM, Alibaba, O’Reilly Media.

Код распространяется по MIT-лицензии. В 2013 году разработка разделена на две версии: для комьюнити — GitLab CE и для предприятий — GitLab EE. Вторая впоследствии получила ряд дополнительных функций, недоступных в CE, имеет два варианта — Starter и Premuim. Справедливости ради следует отметить, что некоторые фишки из EE со временем перекочевывают в CE. Так это случилось с учетом времени (Time Tracking) и GitLab Pages. Написан на Ruby с использованием фреймворка Ruby on Rails, некоторые части на Go.

 

Возможности GitLab

В первую очередь хочется отметить продуманный дизайн. Все просто и на своих местах. Разработчики прислушиваются к пользователям и, меняя меню и интерфейс, делают GitLab более удобным в работе. Интерфейс английский, немецкий и испанский. В Сети есть попытки локализации, но я ими не пользовался.

GitLab поддерживает все основные функции, которые мы привыкли видеть в GitHub: проекты, отслеживание ошибок, запросы на добавление кода, контроль за изменениями, ревью кода, навигацию по веткам и тегам, управление доступом на основе учетных записей и групп. Группы могут быть приватные, внутренние (доступны всем зарегистрированным пользователям) и публичные. С релиза 9.0 появились подгруппы, по возможностям не отличающиеся от групп, но позволяющие лучше организовать проекты в компаниях с большим количеством подразделений или проектов. Доступно до 20 уровней вложенности. Также есть Wiki, функция публикации небольших блоков кода (Code Snippets), графики коммитов участников и аналитика общей активности репозитория, анализ различий между версиями, визуализация ветвления репозитория, веса задач, связанные с мерж-реквестами, protected branches и многое другое.

Главная страница проекта настраиваемая. Здесь можно указывать список файлов, текущую активность или, например, README. Есть поиск и фильтры. Доски задач (Issue Boards) позволяют контролировать задачи на разных этапах, наглядно показывая ход работ, порядок и приоритет задач меняется простым перетаскиванием, сообщения о событиях отправляются по email или в чат. Этим в общем мало кого удивишь. Некоторые вещи (например, code review) могут показаться непривычными, но все работает как нужно, нет необходимости ставить что-то еще вроде CodeBrag или Gerrit.

GitLab можно интегрировать с Jenkins CI, но сам GitLab предоставляет большой набор всяких DevOps-инструментов для разработчиков. С версии 8.0 появилась непрерывная интеграция CI/CD (Continuous Integration / Continuous Delivery) и затем автоматическое развертывание (auto deploy), в том числе и в Kubernetes, позволяющие автоматизировать тестирование, контролировать код, разворачивать приложение. Для активации CI достаточно в корень проекта положить файл .gitlab-ci.yml, в котором описаны задачи (Job), и GitLab, обнаружив файл, будет выполнять все инструкции. Для запуска сборок используется Docker. Позже появилось графическое отображение конвейеров, события конвейеров стали доступны через веб-хуки, и для хранения образов можно использовать приватные Docker-репозитории. Развертывание приложения в Kubernetes отслеживается при помощи deploy boards, текущее состояние отслеживается вплоть до пода (pods), без необходимости использования Dashboard или команд Kubernetes. Для доступа при развертывании используются deploy keys с ограничением по доступу к репозиторию извне, закрытые переменные хранятся в Secret Variables.

С CI/CD тесно связана идея ChatOps. GitLab поддерживает опенсорсную альтернативу Slack — Mattermost, позволяющий вести переписку в публичных и приватных каналах, развертывать приложения в окне чатов, искать информацию, экспортировать переписку.

Для мониторинга GitLab в него интегрирован Prometheus и его компонент, позволяющий отслеживать системные ресурсы Node Exporter. Благодаря этому можно получать данные об используемых ресурсах и выводить их, например на Grafana. С версии 9.0 мониторинг интегрирован в конвейеры CI/CD и репозиторий исходного кода, данные об использовании ресурсов CPU и памяти приложением выводятся прямо в интерфейсе GitLab.

Мониторинг GitLab
Мониторинг GitLab

Следует особо отметить API GitLab, помогающий автоматизировать задачи и управление, поддерживается CLI (gitlab-*) и слеш-команды, позволяющие выполнить сразу несколько операций.

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи один материал

Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.


Оставить мнение

Check Also

GitHub будет следить за безопасностью проектов на Python

Разработчики GitHub сообщили, что Python пополнил список языков программирования, для кото…