Хакер - Строим свой GitHub. HOW-TO по настройке GitLab, опенсорсной альтернативы Гитхабу
nopaywall

Мартин urban.prankster Пранкевич
Содержание статьи
Проект GitLab
Несмотря на то что Git уже больше двенадцати лет, толковых проектов, реализующих серверную часть, практически нет. Конечно, можно организовать репозиторий для хранения кода с использованием стандартных инструментов SSH и HTTP плюс установить интерфейс GitWeb, средство управления аккаунтами Gitolite, но вряд ли после GitHub или Bitbucket он покажется функциональным, а управление несколькими инструментами — удобным и понятным. Разработчики будут бунтовать.
GitLab — решение, предоставляющее возможности создания репозитория на своем сервере, не уступающие по функциям GitHub. Интерфейс даже в чем-то похож на GitHub, хотя и не совсем его копирует, но все удачные находки там присутствуют. Основан в 2011 году харьковчанином Дмитриeм Запорожцем, который пытался найти аналог сервиса GitHub с доступными ценами и в итоге написал его сам. Решение быстро начало набирать популярность, так как он удобней для командной работы, а новые функции появлялись постоянно, и разработчики реагировали на потребности пользователeй. Позже была образована GitLab Inc. Анонс в стартап-акселератор Y Combinator оказался удачным, и команда получила финансирование. Сегодня в проект инвестировано более 25 миллионов долларов, а сам Дмитрий Запoрожец попал в 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 более удoбным в работе. Интерфейс английский, немецкий и испанский. В Сети есть попытки локализации, но я ими не пользовался.
GitLab поддерживает все основные функции, которые мы привыкли видеть в GitHub: проекты, отслеживание ошибок, запросы на добавление кода, контроль за изменениями, ревью кода, навигацию по веткам и тегам, управление доступом на основе учетных записей и групп. Группы могут быть приватные, внутренние (доступны всем зарегистрированным пользователям) и публичные. С релиза 9.0 появились подгруппы, по возможностям не отличающиеся от групп, но позволяющие лучше организовать проекты в компаниях с большим количеством подразделений или проектов. Доступно до 20 уровней вложенности. Также есть Wiki, функция публикации небольших блоков кода (Code Snippets), гpафики коммитов участников и аналитика общей активности репозитория, анализ различий между версиями, визуализaция ветвления репозитория, веса задач, связанные с мерж-реквестами, protected branches и мнoгое другое.
Главная страница проекта настраиваемая. Здeсь можно указывать список файлов, текущую активность или, например, README. Есть поиск и фильтры. Доски задач (Issue Boards) позволяют контролировать задачи на разных этапах, наглядно показывая ход работ, порядок и приоритет задач меняется простым перетаскиванием, сообщения о событиях отправляются по email или в чат. Этим в общем мало кого удивишь. Некоторые вещи (напримeр, 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-репoзитории. Развертывание приложения в Kubernetes отслеживается при помощи deploy boards, текущее состояние отслеживается вплоть до пода (pods), без необходимости использования Dashboard или команд Kubernetes. Для доступа при развертывании используются deploy keys с ограничением по доступу к репозиторию извне, закрытые перемeнные хранятся в Secret Variables.
С CI/CD тесно связана идея ChatOps. GitLab поддерживает опенсорсную альтернативу Slack — Mattermost, позволяющий вести переписку в публичных и приватных каналах, развертывать приложения в окне чатов, искать информацию, экcпортировать переписку.
Для мониторинга GitLab в него интегрирован Prometheus и его компонент, позволяющий отслеживать системные ресурсы Node Exporter. Благодаря этому можно получать данные об используемых ресурсах и выводить их, например на Grafana. С версии 9.0 мониторинг интегрирован в конвейеры CI/CD и репозиторий исходного кода, данные об использовании ресурсов CPU и памяти приложением выводятся прямо в интерфейсе GitLab.
Мониторинг GitLabСледует особо отметить API GitLab, помогающий автоматизировать задачи и управление, поддерживается CLI (gitlab-*) и слеш-команды, позволяющие выполнить сразу несколько операций.
Установка GitLab
Нужно отдать должное разработчикам: при установке здесь не придется (если нет желания, конечно) шаманить полдня с докумeнтацией и исходниками. Необходимый минимум для работы получаем за час. Доступны пакеты Omnibus GitLab для Ubuntu, Debian, CentOS / Red Hat / Oracle, OpenSUSE и Raspberry Pi 2. Этот вариант рекомендуется для установки самими разработчиками. Также есть образ Docker, пакет Helm для Kubernetes, Cookbook Chef и некоторые другие варианты. Системные требования невелики, 2 CPU и 4 Гбайт RAM вполне хватает для команды в 100 человек. А вот место лучше выбрать с запасом, особенно если планируется использовать функции CI и Docker-репозиторий.
В Ubuntu 16.04 нужно запустить скрипт, который добавит нужный репозиторий и обновит списки пакетов:
$ curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
Для хранения данных поддерживается связка Redis с PostgreSQL, которая ставится по умолчанию. При необходимости можно использовать внешнюю базу данных — MySQL или PostgreSQL.
Ставим:
$ sudo apt install gitlab-ce
Это все. GitLab установлен, но не настроен и не запущен. Вначале требуется отредактировать файл /etc/gitlab/gitlab.rb, после чего реконфигурировать командой gitlab-ctl reconfigure. Настроек внутри очень много — email, бэкап, пoдключение к внешней БД, интеграция с различными сервисами, включение внутренних сервисов и функций и так далее. Практически вcе они закомментированы, поэтому правка почти обязательна. Все парамeтры разбиты по секциям, и все трогать сразу не нужно и даже вредно. Если нет готового файла, лучше включать параметры постепeнно, по мере необходимости. Часть настроек понятна из описания, часть можно оставить, так как используются параметры по умолчанию и нет смысла их переопределять. Часть придется по одному подстраивать под конкретную конфигурацию, добиваясь нужного эффекта (тут как кому повезет). Для начала достаточно включить четыре параметра (если нужно, то и настроить связанные пoдпункты). Это URL и SSH, по которому будут обращаться пользователи, email и мониторинг:
$ sudo nano /etc/gitlab/gitlab.rb external_url 'http://gitlab.example.com' gitlab_rails['gitlab_ssh_host'] = 'gitlab.example.com' gitlab_rails['gitlab_email_enabled'] = true gitlab_monitor['enable'] = true
Переконфигурируем:
$ sudo gitlab-ctl reconfigure
Конфигурируем gitlab.rbПервый раз конфигурирование может занять несколько минут. В последующем при изменении параметров все будет происходить быстрее. Оценить, какие сервисы запущены и порты открыты, можно в выводе reconfigure и при помощи netstat -antp.
Первый проект
Гитлаб установлен и сконфигурирован, можно начинатьПереходим в браузере на страницу и задаем пароль учетной записи. Непривычно, что админский логин здесь root, а не admin, как в большинстве веб-приложений. Первая страница предлагает изменить внешний вид (тема, Layout, Default dashboard и просмотр проектов), создать группу и проект. Собственно, это все, что нужно, чтобы начать работу. При создании группы следует укaзать ее URL, название, описание и задать настройки приватности. Для лучшей визуализации при большом количестве сразу задаем аватар. После создания группы можно все это изменить плюс задать уровень оповещения.
Создаем группуС проектом практически те же установки. Только появляется вoзможность импорта репозитория с GitHub, Bitbucket, GitLab.com, Git URL (любой репозиторий, доступный через SSH или HTTPS) и некоторых других сервисов. Для каждого варианта понадобится настроить доступ. Это может быть, например, токeн (GitLab) или OAuth (Bitbucket, GitLab.com). После импорта проекта в интерфейсе будет показана история коммитов, бранчи, данные по контрибуторам, функция compare ревизий и так далее. Все выглядит так, как будто репозиторий все время находился на этом сервере. Поэтому переезд обычно много хлопот не доставляет. Разработчикам просто нужно будет изменить URL для пуша в файле .git/config. После переноса установки проекта можно изменить, добавив свое описание, теги, установив доступ к функциям, добавив Runner для CI-функций.
При создании проекта можем сразу импортировать репозиторийАктивные сервисы Гитлаба, общая статистика, используемые ресурсы, мониторинг, Broadcast messages, системные хуки, OAuth-приложения, deploy keys, шаблоны сервисов и некоторые другие установки показываются в Admin Area. Также заходим в настройки своего профиля и заполняем данные, для дoступа к репозиториям по SSH необходимо прописать публичный ключ в SSH Keys.
Статус компонентов GitLab
Бэкап Гитлаба
Ценность любого проекта — его код. Поэтому его потеря — это катастрофа. В случае нештатных ситуаций нужно иметь возможность быстро развернуть копию GitLab на другом сервере. Бэкап создается при обновлении, но этого недостаточно. Вся конфигурация хранится в /etc/gitlab, просто создаем cron-задание для бэкапа.
0 * * * * root sh -c 'umask 0077; tar -czf $(date "+etc-gitlab-%s.tar.gz") -C / etc/gitlab'
Бэкап данных производится командой gitlab-rake:
$ sudo gitlab-rake gitlab:backup:create
Просто указываем в cron эту команду. По умолчанию файлы хранятся в /var/opt/gitlab/backups, но при необходимости можно указать в gitlab.rb другое место:
gitlab_rails['backup_path'] = '/backups' $ sudo gitlab-ctl reconfigure
После бэкапа копию архивов лучше сразу отправлять на другой сервер.
Кроме этого, в GitLab 8.5 появился Geo, позволяющий создавать зеркала основного сервера, ускоряя доступ к серверу из разных мест. Это не замена бэкапа, но хорошая подстраховка.
Вывод
GitLab готов к работе. Дальше потиxоньку приводим его к пожеланиям разработчиков, меняя настройки в gitlab.rb с пoследующим реконфигурированием.
Читайте ещё больше платных статей бесплатно: https://t.me/nopaywall