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

Проект 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. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

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


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии