Битва Jenkins та GitLab CI/CD

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

Битва Jenkins та GitLab CI/CD

Серед усіх існуючих 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, яка акумулює відгуки про різні продукти та оцінки, які ставлять їм користувачі. Тут середній рейтинг Дженкінс, Виведений на основі 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% вказали, що вони віддають перевагу іншим інструментам.

Битва Jenkins та GitLab CI/CD
Результати опитування

Серед інших CI/CD-інструментів найчастіше згадувався GitLab CI/CD.

Якщо ви всерйоз займаєтеся DevOps, то вам потрібно ретельно підбирати відповідні інструменти з огляду на особливості проекту, його бюджет та інші вимоги. Для того, щоб допомогти вам зробити правильний вибір, ми збираємося провести аналіз Jenkins та GitLab CI/CD. Це хочеться сподіватися, допоможе вам зробити правильний вибір.

Знайомство з Jenkins

Битва Jenkins та GitLab CI/CD
Дженкінс — це широко відомий, гнучкий 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

Битва Jenkins та GitLab CI/CD
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 XNUMX користувачів. На основі таких серверів можна створювати системи, що відрізняються високою доступністю.

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-конвеєра. Але, якщо їх порівняти, виявиться, що вони, хоч і багато в чому схожі, чимось один від одного відрізняються.

Характеристика
Дженкінс
GitLab CI/CD

Відкритий або закритий код
Відкритий код
Відкритий код

Встановлення
Потрібно.
Не потрібно, оскільки це вбудована можливість платформи GitLab.

унікальні особливості
Підтримка плагінів.
Глибока інтеграція у систему керування версіями.

Підтримка
Відсутнє.
Є.

Встановлення та налаштування
Складнощів не викликають
Складнощів не викликають

Самостійне розгортання системи
Це єдиний варіант використання системи.
Підтримується.

Створення CI/CD-конвеєрів
Підтримується, використовується Jenkins Pipeline.
Підтримується.

Моніторинг продуктивності додатків
Відсутнє.
Є.

екосистема
Існує понад 1000 плагінів.
Система розвивається у рамках GitLab.

API
Підтримує розвинену систему API.
Пропонує API для більш глибокої інтеграції до проектів.

Підтримка JavaScript
Є.
Є.

Інтеграція з іншими інструментами
Підтримується інтеграція з іншими інструментами та платформами (Slack, GitHub).
Безліч засобів для інтеграції зі сторонніми системами, зокрема з GitHub і Kubernetes.

Контроль якості коду
Підтримується за допомогою плагіну SonarQube та інших плагінів.
Підтримується.

Відмінності між 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-інструментами ви користуєтесь?

Битва Jenkins та GitLab CI/CD

Битва Jenkins та GitLab CI/CD

Джерело: habr.com

Додати коментар або відгук