[Перевод] Битва Jenkins и GitLab CI/CD

В последнее десятилетие достигнуты значительные успехи в сфере разработки инструментов непрерывной интеграции (Continuous Integration, CI) и непрерывного развёртывания (Continuous Delivery, CD). Развитие технологий интеграции разработки и эксплуатации ПО (Development Operations, DevOps) привело к быстрому росту спроса на CI/CD-инструменты. Существующие решения постоянно улучшаются, стремясь идти в ногу со временем, выходят их новые версии, в мире контроля качества ПО (Quality Assurance, QA) постоянно появляется множество новых продуктов. При таком богатстве выбора подбор подходящего инструментария оказывается нелёгкой задачей.

r0birrnd5mljk2s6wbbnpciztks.png

Среди всех существующих CI/CD инструментов существуют два проекта, на которые, определённо, стоит обратить внимание тому, кто ищет что-то из этой сферы. Речь идёт о Jenkins и об инструменте GitLab CI/CD, который является частью платформы GitLab. У Jenkins имеется более 16000 звёзд на GitHub. Репозиторий GitLab на gitlab.com набрал чуть больше 2000 звёзд. Если сравнить популярность репозиториев, то окажется, что Jenkins набрал в 8 раз больше звёзд, чем платформа, в состав которой входит GitLab CI/CD. Но при выборе CI/CD-инструмента это — далеко не единственный показатель, на который стоит обращать внимание. Есть и масса других, и это объясняет то, что во многих сравнениях Jenkins и GitLab CI/CD оказываются очень близко друг к другу.
Возьмём, например, данные с платформы G2, которая аккумулирует отзывы о самых разных продуктах и оценки, которые ставят им пользователи. Здесь средний рейтинг Jenkins, выведенный на основе 288 отзывов, составляет 4,3 звезды. А о GitLab тут имеется 270 отзывов, средний рейтинг этого инструмента составляет 4,4 звезды. Мы не ошибёмся, заявив, что Jenkins и GitLab CI/CD конкурируют друг с другом на равных условиях. Интересно отметить то, что проект Jenkins появился в 2011 году и с тех времён он является излюбленным инструментом тестировщиков. Но при этом проект GitLab CI/CD, запущенный в 2014 году, занял свои позиции, очень высокие, благодаря предлагаемым этой платформой передовым возможностям.

Если говорить о популярности Jenkins в сравнении с другими аналогичными платформами, то отметим, что мы, опубликовав статью, где сравнивались платформы Travis CI и Jenkins, устроили опрос. В нём поучаствовало 85 пользователей. Респондентам было предложено выбрать CI/CD-инструмент, который нравится им больше всего. 79% выбрали Jenkins, 5% выбрали Travis CI, а 16% указали, что они предпочитают другие инструменты.

4994a61bd4ff873cf766a0c71b3b8763.png


Результаты опроса

Среди других CI/CD-инструментов чаще всего упоминался GitLab CI/CD.

Если вы всерьёз занимаетесь DevOps, то вам нужно тщательно подбирать соответствующие инструменты, учитывая особенности проекта, его бюджет и другие требования. Для того чтобы помочь вам сделать правильный выбор, мы собираемся провести анализ Jenkins и GitLab CI/CD. Это, хочется надеяться, поможет вам сделать правильный выбор.

Знакомство с Jenkins


5e8b59c7fbff673263dc2e8f951c8d1d.jpg


Jenkins — это широко известный, гибкий CI/CD-инструмент, предназначенный для автоматизации множества задач, связанных с программными проектами. Jenkins полностью написан на Java, он выпущен под лицензией MIT. Он обладает мощным набором возможностей, направленных на автоматизацию задач, связанных со сборкой, тестированием, развёртыванием, интеграцией, выпуском программного обеспечения. Этот инструмент можно использовать в различных операционных системах. Среди них — macOS, Windows и множество дистрибутивов Linux, например — OpenSUSE, Ubuntu и Red Hat. Существуют установочные пакеты Jenkins, предназначенные для различных ОС, этот инструмент можно установить в Docker и в любой системе, где есть JRE (Java Runtime Environment).

Разработчики Jenkins создали ещё один проект, Jenkins X, который рассчитан на работу в среде Kubernetes. В Jenkins X интегрированы Helm, сервер Jenkins CI/CD, Kubernetes и другие инструменты, предназначенные для создания CI/CD-конвейеров, соответствующих передовым методам DevOps. Например, здесь используется GitOps.

В копилку достоинств Jenkins можно добавить и тот факт, что его скрипты очень хорошо структурированы, понятны, их легко читать. Команда Jenkins создала около 1000 плагинов, которые направлены на организацию взаимодействия Jenkins с самыми разными технологиями. В скриптах можно пользоваться системами аутентификации, что, например, позволяет подключаться к различным закрытым системам.

В процессе работы конвейера Jenkins можно наблюдать за тем, что происходит на каждом его шаге, за тем, успешно или нет завершились те или иные этапы работы. Наблюдать за всем этим можно, правда, не применяя некий графический интерфейс, а пользуясь возможностями терминала.

Особенности Jenkins


Среди широко известных особенностей Jenkins можно отметить простоту настройки, высокий уровень автоматизации различных операций и отличную документацию. Если говорить о решении DevOps-задач, то здесь Jenkins считается весьма надёжным инструментом, используя который, как правило, нет смысла пристально наблюдать за всем процессом обработки проекта. В случае с другими CI/CD-инструментами это не так. Давайте поговорим о некоторых важнейших возможностях Jenkins.

▍1. Бесплатность, открытый исходный код, поддержка множества платформ


Jenkins может работать на платформах macOS, Windows и Linux. Он может функционировать и в среде Docker, что позволяет организовать единообразное и быстрое выполнение автоматизированных задач. Этот инструмент, кроме того, может выполняться в виде сервлета в контейнерах, поддерживающих Java, в таких, как Apache Tomcat и GlassFish. Установка Jenkins качественно документирована.

▍2. Развитая экосистема плагинов


Экосистема плагинов Jenkins выглядит гораздо более развитой по сравнению с экосистемами подключаемых модулей других CI/CD-инструментов. В настоящее время существует более 1500 плагинов для Jenkins. Эти плагины направлены на решение широкого спектра задач, с их помощью можно автоматизировать самые разные проекты. Богатство выбора бесплатных подключаемых модулей означает, что у того, кто использует Jenkins, нет острой необходимости в покупке дорогостоящих платных плагинов. Существует возможность интеграции Jenkins с множеством DevOps-инструментов.

▍3. Простая установка и настройка


Jenkins довольно просто устанавливать и настраивать. При этом и процесс обновления системы тоже устроен очень удобно. Тут, опять же, стоит упомянуть о качестве документации, так как в ней можно найти ответы на самые разные вопросы, связанные с установкой и настройкой Jenkins.

▍4. Дружелюбное сообщество


Как уже было сказано, Jenkins — это опенсорсный проект, экосистема которого включает в себя огромное количество плагинов. Вокруг Jenkins сложилось большое сообщество пользователей и разработчиков, помогающих развитию проекта. Сообщество — это один из факторов, который способствует развитию Jenkins.

▍5. Наличие REST API


В ходе работы с Jenkins можно пользоваться REST API, что расширяет возможности системы. API для удалённого доступа к системе представлен в трёх вариантах: XML, JSON с поддержкой JSONP, Python. Вот страница документации, раскрывающая подробности о работе с REST API Jenkins.

▍6. Поддержка параллельного выполнения задач


Jenkins поддерживает распараллеливание DevOps-задач. Его можно легко интегрировать с соответствующими инструментами и получать уведомления о результатах выполнения задач. Выполнение тестирования кода можно ускорить за счёт организации параллельной сборки проекта с использованием различных виртуальных машин.

▍7. Поддержка работы в распределённых средах


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

Знакомство с GitLab


648b72b34704274f0408821b04118d5c.jpg


GitLab CI/CD можно назвать одним из самых новых и самых любимых DevOps-инженерами инструментов. Этот бесплатный опенсорсный инструмент встроен в систему контроля версий GitLab. У платформы GitLab есть community-версия, она поддерживает управление репозиториями, средства для отслеживания проблем, организацию код-ревью, механизмы, ориентированные на создание документации. Компании могут устанавливать GitLab локально, связывая эту систему с Active Directory и с LDAP-серверами для организации безопасной авторизации и аутентификации пользователей.

Вот видеоруководство, которое поможет вам узнать о том, как создавать CI/CD-конвейеры с использованием возможностей GitLab CI/CD.

Изначально GitLab CI/CD был выпущен как самостоятельный проект, но в 2015 году этот набор инструментов был интегрирован в GitLab 8.0. Отдельный GitLab CI/CD-сервер может поддерживать работу более чем 25000 пользователей. На основе подобных серверов можно создавать системы, отличающиеся высокой доступностью.

GitLab CI/CD и основной проект GitLab написаны на Ruby и на Go. Они выпущены под лицензией MIT. GitLab CI/CD, помимо обычных возможностей CI/CD-инструментов, поддерживать и дополнительные возможности, связанные, например, с планированием работ.

Интегрировать GitLab CI/CD в проект очень просто. При использовании GitLab CI/CD процесс обработки кода проекта делится на стадии, каждая из которых может состоять из нескольких задач, выполняемых в определённом порядке. Задачи поддаются тонкой настройке.

Задачи могут выполняться параллельно. После настройки последовательности стадий и задач CI/CD-конвейер готов к работе. За ходом его выполнения можно наблюдать, отслеживая состояние задач. В результате пользоваться GitLab CI/CD очень удобно, пожалуй, удобнее, чем другими подобными инструментами.

Особенности GitLab CI/CD и GitLab


GitLab CI/CD — это один из самых популярных DevOps-инструментов. Проект отличается качественной документацией, его возможностями легко и удобно пользоваться. Если вы пока не знакомы с GitLab CI/CD, следующий список возможностей этого инструмента даст вам общее представление о том, чего от него можно ожидать. Надо отметить, что многие из этих возможностей имеют отношение к самой платформе GitLab, в которую интегрирован GitLab CI/CD.

▍1. Популярность


GitLab CI/CD — это сравнительно новый инструмент, нашедший широкое применение. GitLab CI/CD постепенно стал чрезвычайно популярным CI/CD-инструментом, используемым для автоматизированного тестирования и развёртывания программного обеспечения. Его просто настраивать. Это, к тому же, бесплатный CI/CD-инструмент, встроенный в платформу GitLab.

▍2. Поддержка GitLab Pages и Jekyll


Jekyll — это генератор статических сайтов, который можно использовать в рамках системы GitLab Pages для создания сайтов на основе GitLab-репозиториев. Система берёт исходные материалы и генерирует на их основе готовый статический сайт. Управлять внешним видом и возможностями таких сайтов можно, редактируя файл _config.yml, используемый Jekyll.

▍3. Возможности по планированию проектов


Благодаря возможности по планированию этапов проектов повышается удобство отслеживания проблем и их групп. Это позволяет управлять организацией работ по проектам, планировать их выполнение на конкретную дату.

▍4. Автоматическое масштабирование CI-раннеров


Благодаря автоматическому масштабированию раннеров, ответственных за выполнение конкретных задач, можно серьёзно сэкономить на стоимости аренды серверных мощностей. Это очень важно, особенно — если речь идёт о средах, где тестирование проектов выполняется параллельно. Кроме того, это важно для крупных проектов, состоящих из нескольких репозиториев.

▍5. Средства для отслеживания проблем


Мощные возможности GitLab по отслеживанию проблем привели к тому, что эту платформу используют многие опенсорсные проекты. GitLab CI/CD позволяет выполнять параллельное тестирование различных веток кода. Результаты испытаний удобно анализировать в интерфейсе системы. Это выгодно отличает GitLab CI/CD от Jenkins.

▍6. Ограничение доступа к репозиториям


Платформа GitLab поддерживает ограничение доступа к репозиториям. Например, тем, кто совместно работает над проектом в некоем репозитории, можно назначить права, соответствующие их ролям. Это особенно актуально для корпоративных проектов.

▍7. Активная поддержка сообщества


Вокруг GitLab сложилось активное сообщество, которое способствует развитию этой платформы и её инструментов, в частности — GitLab CI/CD. Глубокая интеграция GitLab CI/CD и GitLab, кроме прочего, упрощает нахождение ответов на вопросы, возникающие при работе с GitLab CI/CD.

▍8. Поддержка работы с различными системами контроля версий


GitLab CI/CD — это система, которая способна работать не только с кодом, размещённым в репозиториях GitLab. Например, код можно хранить в GitHub-репозитории, а CI/CD-конвейер можно организовать на базе GitLab с использованием GitLab CI/CD.

Сравнение Jenkins и GitLab CI/CD


Jenkins и GitLab CI/CD — это очень хорошие инструменты, каждый из которых способен обеспечить нормальную работу CI/CD-конвейера. Но, если их сравнить, окажется, что они, хотя и во многом похожи, кое-чем друг от друга отличаются.

Различия между Jenkins и GitLab CI/CD


Описав и сравнив Jenkins и GitLab CI/CD, давайте сосредоточимся на различиях этих DevOps-инструментов. Знание об этих различиях позволит понять тех, кто предпочитает один из этих инструментов другому.

  • GitLab CI/CD может полностью контролировать Git-репозитории. Речь идёт об управлении ветками репозиториев и о некоторых других возможностях. А вот Jenkins, хотя и умеет работать с репозиториями, не даёт такого же уровня контроля над ними, как GitLab CI/CD.
  • Jenkins — это бесплатный опенсорсный проект. Тот, кто его выбирает, разворачивает его самостоятельно. А GitLab CI/CD включён в состав платформы GitLab, это готовое решение.
  • GitLab CI/CD поддерживает развитые средства управления задачами, работающие на уровне проектов. Эта сторона Jenkins развита слабее.


Jenkins и GitLab CI/CD: сильные и слабые стороны


Сейчас у вас сложилось некоторое представление о Jenkins и GitLab CI/CD. Теперь, чтобы вы ещё лучше познакомились с этими инструментами, давайте разберём их сильные и слабые стороны. Полагаем, что вы уже приняли решение о том, какой именно инструмент вам нужен. Хочется надеяться, этот раздел позволит вам проверить себя.

▍Сильные стороны Jenkins


  • Большое количество плагинов.
  • Полный контроль над установкой инструмента.
  • Простая отладка раннеров.
  • Простая настройка узлов.
  • Простое развёртывание кода.
  • Очень хорошая система управления учётными данными.
  • Гибкость и универсальность.
  • Поддержка различных языков программирования.
  • Система понятна на интуитивном уровне.


▍Слабые стороны Jenkins


  • При использовании плагинов могут возникать сложности.
  • При использовании Jenkins в маленьких проектах затраты времени, необходимые на его самостоятельную настройку, могут оказаться неоправданно большими.
  • Отсутствие общих аналитических сведений по CI/CD-цепочкам.


▍Сильные стороны GitLab CI/CD


  • Хорошая интеграция с Docker.
  • Простое масштабирование раннеров.
  • Параллельное выполнение задач, входящих в состав стадий CI/CD-конвейера.
  • Использование модели ориентированного ациклического графа при настройке взаимоотношений задач.
  • Высокий уровень масштабируемости за счёт возможности параллельного выполнения раннеров.
  • Лёгкость добавления задач.
  • Простое разрешение конфликтов.
  • Надёжная система безопасности.


▍Слабые стороны GitLab CI/CD


  • Для каждой задачи нужно описывать и загружать/выгружать артефакты.
  • Нельзя протестировать результаты объединения веток до их фактического объединения.
  • При описании стадий CI/CD-конвейера в них пока нельзя выделять отдельные этапы.


Итоги


И Jenkins, и GitLab CI/CD имеют сильные и слабые стороны. Ответ на вопрос о том, что именно выбрать, зависит от нужд и особенностей конкретного проекта. Каждый из рассмотренных сегодня CI/CD-инструментов отличается определёнными особенностями, хотя созданы эти инструменты для решения одной и той же задачи. При этом Jenkins — это автономный инструмент, а GitLab CI/CD — это часть платформы, предназначенной для совместной работы над кодом.

Выбирая CI/CD-систему стоит, помимо её возможностей, принимать во внимание и те затраты, которые могут быть с ней связаны, и то, с чем именно привыкли работать DevOps-инженеры, поддерживающие проект.

Какими CI/CD-инструментами вы пользуетесь?

oug5kh6sjydt9llengsiebnp40w.png

3piw1j3wd_cgmzq9sefgferaumu.png

© Habrahabr.ru