Без сомнения, система контроля версий — один из самых незаменимых инструментов разработчика. Так исторически сложилось, что в Creative мы используем git в качестве CVS. Изначально у нас был VPS с настроенным gitosys, но потом настал хаос.
Для каждого проекта нужно создать свой репозиторий, добавить ключ разработчика, а то и нескольких, на сервер. И так из раза в раз, без какой бы то ни было автоматизации. Многочисленные фрилансеры, специалисты заказчика, которым непременно нужно вносить какие-нибудь изменения в скрипты сайта, текучка кадров, отсутствие ответственного за актуальность всех ключей и репозиториев — все это превращает сервер в уязвимую помойку с мешаниной из нужных и устаревших данных.
В таких условиях, решение об использовании системы менеджмента git-репозиториев назрело само собой.
Требования к системе управления репозиториями
Для начала мы сформулировали все фичи, которые бы хотели видеть в такой системе:
должна позволять создавать неограниченное количество репозиториев, изменять и удалять репозитории, созданные с помощью git;
должна позволять создавать неограниченное количество пользователей системы;
должна позволять каждому пользователю добавлять в свой аккаунт неограниченное количество открытых ssh ключей;
должна проверять каждый ssh ключ на уникальность и не допускать добавления одинаковых ключей для различных пользователей;
должна обеспечивать разграничение прав пользователей;
репозитории должны быть доступны из любой точки сети интернет, если пользователь имеет соответствующие права доступа;
репозитории должны быть доступны по всем протоколам обмена информацией, которые поддерживает git.
Облачные хостинги git-репозиториев
Затем мы обратились к облачным платформам, которые специализируются на хостинге git-репозиториев. Зачем изобретать свой велосипед, когда есть кто-то, кто может предоставить качественную услугу и техническую поддержку? Откровенно говоря, цены нас не обрадовали. Особенно они нас не обрадовали после падения курса рубля.
Для примера. Bitbucket:
Тарификация по пользователям. Довольно высокие цены, особенно, если учесть скольким пользователям нужен будет доступ к нашим репозиториям (на данный момент их уже 30 и это далеко не предел).
Github:
Ограничения по количеству закрытых репозиториев. Тоже неудобно.
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 до сих пор не вселяют оптимизма.
Еще одним из минусов можем назвать перегруженный функциями интерфейс, многие из которых остаются невостребованными в студийной разработке.
Но не все так грустно. Нам удалось стабилизировать работу сервера, а своевременные обновления решают все проблемы, связанные с багами. За последние полгода gitlab показал себя как удобный и мощный инструмент, который помогает решать весь спектр задач, связанный с управлением git-репозиториями. С уверенностью можем сказать, что он ни в чем не уступает своим облачным аналогам.
Самым важным для нас преимуществом является то, что свой сервер позволяет создавать неограниченное количество пользователей и репозиториев и очень гибко задавать настройки, которые требуются для уникального в каждой студии процесса разработки.