GitLab vs GitHub кто лучше для проектов и бизнеса
Разработчики в определенный момент становятся перед выбором, какой сервис для системы контроля версий выбрать.
И даже самые опытные чаще всего колеблются: GitHub или GitLab?
Разработчики в определенный момент становятся перед выбором, какой сервис для системы контроля версий выбрать. И даже самые опытные чаще всего колеблются: GitHub или GitLab?
Важность сервисов для совместной разработки и управления процессом создания программного обеспечения постоянно растет в течение последних 20 лет. Благодаря скоростному интернету развилась целая отрасль - аутсорс-разработка ПО. Потенциал онлайн-средств создания программных продуктов и сервисов до сих пор не раскрыто полностью, а особую роль в этом процессе играют системы управления версиями программного кода и соответствующие сервисы для командной работы.
Немного истории
До появления известной системы Git, которую создал Линус Торвальдс, разработчики пользовались CVS, SVN и другими средствами управления версиями. Но основной проблемой здесь была одноуровневая система комита. В случае ошибки невозможно было исправить ее без вмешательства в репозиторий. Линус Торвальдс для разработки ядра Linux написал собственную систему управления версиями с двухуровневой системой записи информации в репозиторий. То есть сначала мы делаем git commit, проверяем, все ли в порядке в локальном репозитории, и дальше можем сделать git push в удаленный репозиторий, где изменения видеть все участники проекту.
Git - это сугубо система управления версиями. Часто для совместной разработки программного обеспечения необходимо иметь Вебсервис для согласованных действий с кодом проекту, отслеживание изменений и организации взаимодействия. Поэтому на базе Git появился Вебсервис GitHub, куда было добавлено возможность управления задачами и Wiki для каждого проекту. А чуть позже - GitLab, который занял свою нишу благодаря более развитым функциям и возможности выполнять CI/CD. Основная задача GitHub и GitLab - способствовать взаимодействию разработчиков в проектах.
Система управления версиями и интегрированная система управления задачами очень важны при разработке и поддержке программного обеспечения и сервисов, так как требования к информационным системам постоянно меняются и появляются новые. Иногда просто оценить сложность разработки программы, а также заказчик часто не обладает всей необходимой информацией для четкого формулирования требований к продукту в начале работы.
Некоторые разработчики считают, что для малых проектов система управления версиями и проектом не нужна. Это вроде лишнее. Но когда доходит до поддержки реального продукта для пользователей, отсутствие репозитория кода и системы управления версиями может иметь крайне негативные последствия. В репозитории должно быть все - абсолютно полная информация о проекту. И любое движение в проектно управлении должен быть записан в системе, а не на бумаге. Даже когда вы делаете простенький вебсайт на HTML, все равно записывайте все в репозиторий. Опыт доказывает, как это полезно.
Систему GitLab создавал инженер Дмитрий Запорожец. Еще в 2011 году он понял важность коммуникации в проектах на уровне системы управления разработкой кода и системы управления задачами.
С самого начала проект GitLab можно было установить на собственных серверах или в инстанс в облачных системах, продукт имел лицензию MIT. Далее, в 2013 году, его разделили на Community Edition и Enterprise Edition с сохранением свободной лицензии MIT с открытым кодом. Сейчас систему используют более 100 000 организаций, включая IBM и Alibaba, NASA, CERN.
Подробно рассмотрим обе системы и оценим применения GitHub и GitLab для проектов различных категорий.
Сравним GitHub и GitLab по различным параметрам и вариантами использования.
Деловая перспектива
Основные преимущества GitHub с точки зрения бизнес-руководителей заключаются в большом количестве доступных пользователей в системе. Также немало опенсорс-проектов размещается именно здесь. Наличие бесплатных командных частных репозиториев часто становится главным фактором выбора GitHub.
Однако GitLab дает лучшие технические возможности, имеет поддержку Financial Services Regulatory Compliance, PCI, HIPPA и тому подобное. С точки зрения размещения проприетарной информации, персональных данных, другой чувствительной информации, безусловно, преимущество на стороне GitLab, потому что систему можно установить на собственных серверах.
Непрерывная интеграция
Бытует мнение, что GitLab имеет значительно большие возможности с Continuous Integration сравнению с GitHub: это built-in CI, возможность управлять большим количеством сложных проектов и команд с помощью механизма подгрупп, просматривать программу перед объединением, чтобы уменьшить дефекты и сократить время разработки.
В последнее время GitHub значительно улучшил свою систему CI, которая называется GitHub Actions. Имея доступ непосредственно к репозитория и метаданных сервиса Actions, можно настроить процесс CI до таких маленьких удобств, как возможность отправить ссылку на Pull Request в Slack сообщении для дальнейшего проведения Code Review. Конфигурация происходит с помощью YAML файлов, доступный marketplace готовых экшенов для интеграции в проект (большинство из них пока бесплатные). Конечно, система еще новая и недавно вышла из фазы бета-тестирования, но ее гибкость позволяет исправить все недостатки самостоятельно.
Непрерывная доставка
GitLab имеет шаблон Auto DevOps, который обеспечивает заранее определенную конфигурацию CI/CD. Это позволяет пользователям автоматически определять, создавать, тестировать, разворачивать и контролировать приложения. Благодаря Auto DevOps можно использовать лучшие практики и инструменты CI / CD, а следовательно, значительно упростить настройки и выполнения совершенного и современного жизненного цикла разработки программного обеспечения. Среди средств отметим Auto Build, Auto Test, Auto Code Quality, Auto Dependency Scanning, Auto Review Apps, Auto Deploy, Auto Monitoring. Есть еще много других полезных возможностей в перформанс-тестировании и сканировании безопасности.
Лицензии и стоимость
На бесплатном GitLab, кроме базовых неограниченных функций, как в GitHub, можно применять все стейдж цикла DevOps, создавать собственную Continuous Integration, Production Environment и иметь ресурс 2000 на CI/CD.
Также GitLab предлагает подписку за $220 в год. Соответственно, в этих планах усиливается поддержка по техническим вопросам от компании и расширяются возможности и мощности в CI/CD и DevOps, возможности управления большим количеством проектов.
Качество Version Control & Collaboration
С точки зрения управления задачами в проект (issue management) GitLab поможет измерять и отслеживать полный жизненный цикл разработки - от планирования до развертывания. Наиболее важными являются такие средства, как Time Tracking, Burndown Charts, Issue Due Dates Функция перемещения задачи в другой проект.
Также в системе контроля версий GitLab есть возможность делать импорт и экспорт из других систем управления (GitHub, Bitbucket, Google Code, FogBugz, Gitea) или с любого доступного Git URL. Кроме этого, существует поддержка различных видов репозиториев: Mono Repos, Conan (C ++), Go, Composer (PHP), PyPI (Python), RPM и Debian (Linux). А вот GitHub лучше поддерживать Visual Studio от Microsoft, так как именно эта компания сейчас владеет сервисом GitHub.
Дорожная карта безопасности
План по безопасности компания GitLab начала публиковать еще с 2018 года. Это существенно повысило безопасность продукта и позволило разработчикам выявлять и исправлять системные проблемы на самых ранних этапах проектирования и кодирования. Поскольку код продукта GitLab является открытым, это дает возможность более чем 3000 разработчикам системы улучшать ее безопасность и целостность, сразу анализировать проблемы на разных уровнях.
GitHub тоже присоединился к этой идее и опубликовал свой роадмап по безопасности в июне 2020 года. GitHub хотя и не является системой с открытым программным кодом, но в последнее время сделал более 200 фич в направлении секьюрности.
Непрерывная интеграция и доставка
Важной частью процесса разработки является CI/CD, и это понимают разработчики как облачных систем, так и веб-сервисов для совместной разработки программного обеспечения. Эти требования обусловлены необходимостью очень быстро поставлять новое программное обеспечение пользователям и повысить надежность деплойменту на продакшн-серверы и инстансы.
GitLab CI/CD
GitLab с точки зрения CI/CD предоставляет очень широкие возможности по созданию сценариев и интеграции с репозиториями проекту. Только в ветке появляется новый комит, система CI/CD запускает конвейер непрерывного интеграции и непрерывной доставки. В то же время есть возможность запускать последовательные и параллельные сценарии. Также система предоставляет дополнительные сервисы, например, для проверки качества кода GitLab Code Quality, Browser Performance Testing для тестирования скорости браузера, Load Performance Testing для проведения нагрузочных тестов. Кроме того, это возможность выполнять расширенное тестирование для Container Scanning, Dependency Scanning и ДЭПЛ на продакшн программного обеспечения в кластеры Kubernetes с помощью Auto Deploy.
Предложение непрерывной интеграции от GitLab, партнера из передовых технологий AWS Partners Network (APN) с компетенцией AWS DevOps, обеспечивает широкий набор функций для автоматизации. Использование сервиса в облаке Amazon облегчает включение нового кода в ваше программное обеспечение и помогает в развертывании новой версии программного обеспечения.
Развертывание GitLab
На серверах и в облачных сервисах
Поскольку проект GitLab сначала создавали для собственного использования, то возможность развертывания GitLab на своих серверах была опцией по умолчанию. Искренняя благодарность авторам и владельцам продукта, они позволяют пользоваться GitLab как в облачном варианте (аналогично GitHub), так и скачать все необходимое и установить этот Вебсервис в себя.
Почему возникает такая задача? Потому что определенные организации, например банки, объекты критической инфраструктуры, медицинские учреждения, бывают ограничены в использовании публичных облачных сервисов, но нуждаются поддерживать большое количество пользователей.
С точки зрения ресурсов для установления системы рекомендуют иметь хотя бы 4GB of RAM. По собственному опыту добавим, что лучше использовать SSD. То есть требования для работы системы невысоки.
Процедура установки GitLab на сервере вполне стандартная. Рассмотрим на примере Ubuntu. Во-первых, делаем apt-get update, как обычно. Затем докинуть еще несколько Тулз, необходимых для работы, в частности curl, openssh-server, ca-certificates, tzdata . Далее добавим к системе postfix , это будет нужно для электронных писем и оповещения пользователей. Затем загружаем файл скрипта для GitLab с помощью curl . И запускаем команду apt-get на установление системы GitLab. Вот вы уже имеете GitLab у себя на сервере - дальше переходим по ссылке сервера и выполняем все необходимые настройки.
Но самый (абсолютный) метод установления GitLab на собственных мощностях - это компиляция из исходных кодов. Весь код GitLab вы можете скачать и запустить на компиляцию, а затем установить на свой сервер. В таком случае вы имеете полный доступ к необходимой конфигурации системы и можете настраивать ее под свои нужды. Преимущества такого решения заключаются и в том, что можно установить stable-версию со всеми новыми фичам.
Отдельно надо упомянуть о возможности инсталляции GitLab через Helm для Kubernetes, нативный для облачных систем. Это помогает избежать лишних движений по конфигурации в Kubernetes и облегчает работу администраторов и девопсив.
В облачных системах GitLab возможно установить для Amazon Web Services, Google Cloud Platform, Microsoft Azure и других облачных систем, где поддерживается Linux.
У Docker-контейнерах
Лучшим вариантом является установление GitLab в собственном контейнере (в GitHub такая возможность отсутствует). GitLab предоставляет официальный слепок (docker image) для установки системы в контейнере со всеми преимуществами такого решения, а именно:
- возможность универсально оперировать многими системами GitLab для крупных компаний;
- возможность перенастраивать GitLab на других серверах без существенных действий в администрировании, с сохранением всех настроек для пользователей;
- при правильных настройках повысить безопасность системы;
- в случае отказа оборудования быстро поднимать систему на других мощностях;
- при необходимости быстро переходить в облачную систему или переносить GitLab между различными облачными системами.
Разработчики GitLab пошли еще дальше и подготовили два варианта docker image для установления в версии Community Edition и в версии Enterprise Edition. Docker пока не поддерживается полностью на Windows, и могут возникать определенные проблемы, например, с volume permissions.
GitLab контейнер использует host mounted volumes для сохранения постоянных данных. Возможно, существуют и лучшие способы решения этой задачи. Например, для Linux является вариант установить путь к домашней папке GitLab с помощью переменной $ GITLAB_HOME. Тогда мы сможем хранить отдельно данные, отдельно лог-файлы и отдельно конфигурационные файлы GitLab.
И здесь возникает вопрос: а не лучше было бы идти путем установления и конфигурации базы данных? С одной стороны, это несколько усложняет настройки системы, а с другой - облегчает администрирование, так как база данных тогда сохраняет всю необходимую информацию. Возможно, такое решение было принято учитывая скорость работы с файловой системой, чтобы не нагружать мощности серверов.
Установить GitLab в Docker можно по одному из трех способов: через Docker Engine (наиболее популярный вариант), через Docker Compose (с помощью конфигурационного файла YAML, где задать дополнительные настройки) и Docker swarm mode (через систему кластеризации Docker Engines, этот вариант подходит для высоконагруженных приложений).
Установить GitLab в контейнере просто. Преимущество Docker заключается в том, что обновление и резервные копии GitLab можно выполнять с помощью средств контейнеризации буквально в одну строку. Главное - это стандартизация с Docker. Все будет работать везде, где есть поддержка контейнеризации (и в облачных системах тоже).
Чтобы ускорить работу контейнера и выполнить необходимые настройки, можно применить Docker Compose устанавливать с Docker Images. Но настоящие герои-админы делают это самостоятельно в своем контейнере, чтобы тогда соответствующим образом масштабировать.
Резюмируя рассмотрены аспекты и опыт работы с GitHub и GitLab имеем следующие выводы:
- GitHub хорошо подходит для проектов с открытым кодом. Это полезно для создания собственного имиджа разработчика или компании. Благодаря большому количеству пользователей проект видит большая аудитория.
- GitHub идеально подходит для коммерческих проектов, когда планируете пользоваться исключительно функциями системы управления версиями.
- GitLab хорошо работает для проектов, где хотят построить качественный CI / CD на стороне облачной системы.
- GitLab является абсолютным решением, когда систему совместной разработки и систему контроля версий необходимо установить на собственных серверах (для организаций с ограниченным доступом к публичным облачных систем, для обработки персональных данных, для повышения уровня безопасности системы и т.д.).
- GitLab можно развернуть в Docker-контейнерах, когда есть необходимость управлять большим количеством систем совместной разработки на корпоративном уровне и можно использовать Kubernetes для облегчения сопровождения.
Следует заметить, что существуют и альтернативы указанным решением, например, система BitBucket от компании Atlassian. Это развитая платформа для совместной разработки программного обеспечения. Ее тоже применяют, это подтверждено опытом работы в открытых и закрытых коммерческих проектах. Главной чертой системы BitBucket является удобство и интуитивный интерфейс пользования.
Обе системы - и GitHub, и GitLab - предлагают чрезвычайно развитые и комплексные решения. Но каждый конкретный проект требует определенных настроек системы управления версиями и управления проэктам, поэтому на данный момент победителем а нашем сравнительном обзоре является GitLab.