Блог CREATIVE

Опыт использования gitlab

Статьи Обучение Интересное Разработка



Без сомнения, система контроля версий — один из самых незаменимых инструментов разработчика. Так исторически сложилось, что в Creative мы используем git в качестве CVS. Изначально у нас был VPS с настроенным gitosys, но потом настал хаос.


Для каждого проекта нужно создать свой репозиторий, добавить ключ разработчика, а то и нескольких, на сервер. И так из раза в раз, без какой бы то ни было автоматизации. Многочисленные фрилансеры, специалисты заказчика, которым непременно нужно вносить какие-нибудь изменения в скрипты сайта, текучка кадров, отсутствие ответственного за актуальность всех ключей и репозиториев — все это превращает сервер в уязвимую помойку с мешаниной из нужных и устаревших данных.

В таких условиях, решение об использовании системы менеджмента git-репозиториев назрело само собой.


Требования к системе управления репозиториями


Для начала мы сформулировали все фичи, которые бы хотели видеть в такой системе:

  1. должна позволять создавать неограниченное количество репозиториев, изменять и удалять репозитории, созданные с помощью git;
  2. должна позволять создавать неограниченное количество пользователей системы;
  3. должна позволять каждому пользователю добавлять в свой аккаунт неограниченное количество открытых ssh ключей;
  4. должна проверять каждый ssh ключ на уникальность и не допускать добавления одинаковых ключей для различных пользователей;
  5. должна обеспечивать разграничение прав пользователей;
  6. репозитории должны быть доступны из любой точки сети интернет, если пользователь имеет соответствующие права доступа;
  7. репозитории должны быть доступны по всем протоколам обмена информацией, которые поддерживает git.


Облачные хостинги git-репозиториев


Затем мы обратились к облачным платформам, которые специализируются на хостинге git-репозиториев. Зачем изобретать свой велосипед, когда есть кто-то, кто может предоставить качественную услугу и техническую поддержку? Откровенно говоря, цены нас не обрадовали. Особенно они нас не обрадовали после падения курса рубля.

  • Для примера. Bitbucket:

image

Тарификация по пользователям. Довольно высокие цены, особенно, если учесть скольким пользователям нужен будет доступ к нашим репозиториям (на данный момент их уже 30 и это далеко не предел).


  • Github:

image

Ограничения по количеству закрытых репозиториев. Тоже неудобно.


  • Gitlab

Параллельно с облачными хостингами мы рассматривали так же и софт, который можно будет установить на свой сервер. Пожалуй, самым известным, едва ли не единственным предложением, является gitlab. Подкупали и открытый исходный код, и большое сообщество, и бесплатная Community Edition версия. Рассмотрев альтернативы с расчетом на будущий рост количества проектов, мы решили использовать именно gitlab.

На тот момент еще не было удобного Omnibus package, и нам пришлось собирать все зависимости и настраивать пакеты на сервере самостоятельно.

Прежде всего, неприятно удивило количество программ, которые требуются для нормальной работы gitlab: Ruby, PostgreSQL, Redis, Nginx, Unicorn, Go и т.д.

Мы используем VPS, на котором 2 ядра процессора, 2 Гб оперативной памяти — минимальные системные требования gitlab. Веб интерфейс на таком сервере работает не так быстро, как хотелось бы, но, тем не менее, терпимо.

Кроме того, в какой-то момент gitlab перестал отображать изменения, например: не выводил в списке новые коммиты, не давал подключить новые ssh-ключи. После добавления еще 2 Гб swap, проблема исчезла. Есть веские основания приобретать более мощный сервер.

Еще одним минусом стал неприятный баг с кэшированием настроек системы, который ушел в релиз. Мы не могли поменять настройки gitlab из административной панели без перезапуска redis. После обновления до свежей версии проблема была решена, но 3132 (на момент написания статьи) открытых бага в багтрекере community edition до сих пор не вселяют оптимизма.

Еще одним из минусов можем назвать перегруженный функциями интерфейс, многие из которых остаются невостребованными в студийной разработке.

image

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

Самым важным для нас преимуществом является то, что свой сервер позволяет создавать неограниченное количество пользователей и репозиториев и очень гибко задавать настройки, которые требуются для уникального в каждой студии процесса разработки.