JustPaste.it

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

nopaywall

https://t.me/nopaywall

Мартин urban.prankster Пранкевич

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

Проект 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 Мониторинг 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 Конфигурируем 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

 

 

Бэкап Гитлаба

Ценность любого проекта — его код. Поэтому его потеря — это катастрофа. В случае нештатных ситуаций нужно иметь возможность быстро развернуть копию 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