Инструменты непрерывной интеграции и развертывания CI/CD на сегодня довольно востребованы. Из всех актуальных решений есть два очевидных лидера, Jenkins и GitLab. На крупных сервисах отзывов у обоих решений примерно одинаковый рейтинг, но смотреть стоит не только на это. Давайте разберемся с преимуществами Jenkins и GitLab, и для каких задач они лучше всего подходят.
GitLab
Это бесплатный opensource-продукт, выпущенный под лицензией MIT и написанный на языках Go и Ruby. Отдельный сервер на таком решении способен работать более чем с 25 000 пользователями.
Интерфейс GitLab
GitLab дает возможности работы с репозиториями, ревьюить код, имеет собственную систему контроля ошибок и многое другое. Для повышения конфиденциальности пользователей есть возможность связать инструмент с Active Directory и с LDAP-серверами, установив его локально.
Большое и вовлеченное сообщество делает работу с продуктом комфортной. GitLab используется не только для создания кода, но и для его тщательной проверки. Поддерживаются практически все среды сборки и системы контроля версий.
Плюсы
- Подробная документация и простое управление.
- Удобный пользовательский интерфейс для наблюдения за результатами тестирования. Можно дать права на чтение и изменение как отдельным людям, так и группе пользователей.
- Удобный инструмент для установки майлстоунов, что позволяет оперативно отслеживать и решать проблемы.
- Легкое назначение контрольных точек проекта и их группировка по задачам.
- Удобное параллельное тестирование pull requests и веток, что делает его хорошим выбором для opensource-проектов.
Минусы
- Артефакты (файлы, которые сохранить после сборки) требуется определять и загружать для каждого задания.
- Этапы внутри больших задач пока не поддерживаются.
Jenkins
Расширяемое opensource-решение для автоматизации развертывания. Jenkins написан на Java и тоже работает под лицензией MIT. У него богатый набор функций для автоматизации задач сборки, тестирования, развертывания, интеграции и релиза программного обеспечения.
Интерфейс Jenkins
Кроме инсталяции через традиционный установочный пакет он может быть установлен как автономно, так и в качестве Docker на любой машине с установленной Java Runtime Environment (JRE).
Существует также подпроект команды Jenkins под названием Jenkins X, который специализируется на CI/CD в рамках кластеров Kubernetes.
Команда Jenkins выпустила около 1 500 плагинов, благодаря чему его можно использовать вместе с другими решениями — например, co Slack, Jira и другими. Интеграция также доступна для ряда инструментов тестирования DevOps. Есть поддержка REST API для удаленного доступа к системе. Существует три его варианта: Python, XML и JSON с поддержкой JSONP. Как и в случае с GitLab, продукт помогает развивать большое неравнодушное сообщество. Также решение может работать в качестве сервлета в контейнерах Java, таких как GlassFish и Apache Tomcat.
Плюсы
- Простота настройки и обновления (всего за несколько шагов).
- Автоматизированный процесс сборки и подробная понятная документация.
- Легкая интеграция с другими инструментами, в этом случае вы можете получать уведомление о ходе процесса.
- Использование нескольких машин для распределенных сборок. Это полезно в задачах, когда нужно протестировать продукт в нескольких разных средах.
Минусы
- Сложная интеграция плагинов.
- Решение не очень подходит для небольших проектов, так как его настройка довольно трудоемкая.
Суммируем
Jenkins хорош большой библиотекой плагинов, полным контролем над рабочими пространствами, легкой настройкой узлов и простым развертыванием. В целом решение гибкое, универсальное и несложное в освоении, с поддержкой множества языков (но нет русского).
В
GitLab просто масштабировать раннеры, есть параллельное выполнение заданий в рамках разных фаз конвейера. Решение очень хорошо масштабируется, легко добавлять задачи. Также в GitLab качественно сделан с точки зрения безопасности и конфиденциальности.
С помощью GitLab можно контролировать все аспекты работы с Git-репозиториями, включая ветки с кодом С Jenkins же вы контролируете репозитории только до некоторой степени. Например, ветки вы контролируете не полностью.
Также стоит помнить изначальную задачу, которая стояла при разработке обоих инструментов. Jenkins создавался в первую очередь для реализации CI, а GitLab — для совместной работы с кодом и контроля версий.