GitLab CI проти. Дженкінс: відмінності та подібності [2023]

Процес Розробки Програмного Забезпечення: Шлях до Автоматизації

Створення програмного забезпечення можна уподібнити до захоплюючої подорожі, яка розпочинається з ретельного планування та аналізу, переходить до етапу проектування та безпосередньої розробки, а завершується тестуванням, впровадженням та подальшим обслуговуванням. На кожному з цих етапів розробники використовують різноманітні інструменти, що допомагають їм впоратися з поставленими завданнями.

Серед найвідоміших рішень для безперервної інтеграції та доставки (CI/CD) виділяються GitLab CI та Jenkins. CI/CD – це сукупність автоматизованих процесів, що оптимізують розробку програмного забезпечення.

У цій статті ми розглянемо кожен з цих інструментів окремо, пояснимо їхній принцип роботи та порівняємо основні функціональні можливості.

Що Таке GitLab CI?

GitLab Continuous Integration and Delivery – це DevOps-інструмент, що автоматизує процеси, необхідні для створення, тестування та розгортання коду в робочому середовищі. Він складається з двох основних частин: безперервної інтеграції (CI) та безперервної доставки/розгортання (CD).

Безперервна інтеграція (CI) призначена для автоматизації збірок. Вона забезпечує зворотний зв’язок через перевірку коду, а також автоматизує процеси перевірки безпеки та якості. В результаті CI створює готовий до розгортання пакет.

Безперервна доставка/розгортання (CD) в GitLab CI автоматично керує інфраструктурою, обробкою запитів, змінами інфраструктури та версіями випусків. CD надає середовище для поступового розгортання коду та дозволяє перевіряти й контролювати всі зміни. Ця функція також дає можливість відкочувати зміни за потреби.

Поєднуючи CI та CD, ви можете автоматизувати весь життєвий цикл розробки програмного забезпечення (SDLC) з мінімальною участю людини.

Отже, GitLab CI використовується для:

  • Зберігання та управління кодом
  • Автоматизації конвеєра CI/CD
  • Відстеження проблем
  • Захисту коду
  • Співпраці

Переваги Використання GitLab CI

  • Підвищена Швидкість: Завдяки GitLab CI ви більше не витрачаєте час на ручне виконання таких процесів як збірка, тестування та розгортання коду.
  • Покращена Якість Коду: GitLab CI допомагає виявляти помилки та недоліки у вашому коді ще до його випуску в робоче середовище.
  • Безпека: GitLab CI має ряд функцій безпеки, зокрема сканування вразливостей, управління секретами та сканування коду, що зменшують ризик злому.
  • Гнучкість: GitLab CI легко налаштовується під потреби вашої команди розробників, і його можна використовувати з різними мовами програмування та фреймворками.
  • Автоматичне Тестування: Вам не потрібно вручну запускати тести, оскільки можна створити скрипти для автоматичного написання та виконання тестів.

Що Таке Jenkins?

Jenkins – це розширюваний сервер автоматизації з відкритим кодом. Він допомагає користувачам створювати конвеєри безперервної інтеграції та доставки (CI/CD). Jenkins є популярним інструментом серед DevOps-інженерів та розробників програмного забезпечення, оскільки сприяє покращенню якості, надійності та швидкості випуску програмного забезпечення.

Jenkins виконує набір “завдань” або кроків у конвеєрі. Завдання складається з декількох кроків, що виконуються послідовно. Крок у Jenkins може бути збіркою, тестуванням, розгортанням або будь-яким іншим завданням, яке можна автоматизувати в процесі розробки програмного забезпечення.

Застосування Jenkins можна звести до наступного:

  • Безперервна інтеграція
  • Безперервна доставка
  • Автоматизоване тестування
  • Моніторинг та звітування
  • Сканування коду
  • Планування завдань

Переваги Використання Jenkins

  • Масштабованість: Jenkins можна використовувати як з малими, так і з великими проектами.
  • Проста Конфігурація: Jenkins має простий процес налаштування, що підкріплений значною кількістю ресурсів.
  • Велика Спільнота: Jenkins існує вже близько двох десятиліть і має велику базу користувачів.
  • Різноманітність Плагінів: Функціональність Jenkins можна розширити за допомогою численних плагінів.
  • Паралельне Виконання Завдань: Jenkins дозволяє виконувати декілька завдань одночасно, що заощаджує час.

Спільні Риси GitLab CI та Jenkins

  • Обидва інструменти підтримують безперервну інтеграцію та безперервну доставку.
  • Обидва є інструментами з відкритим кодом.
  • Обидва мають велику спільноту користувачів.
  • Обидва підтримують різні мови програмування та фреймворки.
  • Обидва автоматизують різні завдання в життєвому циклі розробки програмного забезпечення.
  • Обидва мають розгалужену екосистему плагінів та розширень.

GitLab CI проти Jenkins: Порівняння Функцій

Функція GitLab CI Jenkins
Відкритий код Так Так
Підтримка мов Багато мов Багато мов
Ціна Більшість функцій доступні у безкоштовному плані. Є платні плани з більшою кількістю можливостей. Безкоштовний.
Зрілість Новіша платформа; створена у 2014 році. Jenkins був запущений як Hudson, але відокремився та був перейменований на Jenkins у 2011 році.
Простота використання Легкий у використанні Може бути складним для початківців
Хостинг Внутрішній і зовнішній Внутрішній і зовнішній
Передумови Node.JS, Git, Ruby, Go Java Runtime Environment

GitLab CI проти Jenkins: Детальне Порівняння

Незважаючи на схожість, GitLab та Jenkins мають відмінності, що впливають на їх підхід до управління процесом CI/CD. Розглянемо деякі ключові аспекти:

Архітектура

Jenkins використовує архітектуру “майстер-працівник” для керування збірками.

  • Майстер Jenkins планує виконання завдань і передає їх працівникам для фактичної реалізації. Він також відстежує стан завдань, збирає та узагальнює результати збірок на веб-панелі.
  • Працівник Jenkins – це Java-файл, який виконується на віддаленій машині. Він приймає запити від майстра та виконує їх. Ви можете використовувати понад 100 працівників і додавати або видаляти їх за потреби.

GitLab CI є складовою GitLab, веб-інтерфейсу для управління репозиторіями, запитами на злиття та іншими процесами. GitLab CI має такі компоненти:

  • Інструмент GitLab CI/CD дозволяє керувати збірками.
  • GitLab Runners виконують усі завдання CI. Ці процеси можуть виконуватися в хмарі або на вашому комп’ютері.
  • Конфігурації конвеєра CI/CD визначаються у файлі .gitlab-ci.yml. Цей файл містить опис усіх завдань, етапів та кроків конвеєра.

Плагіни

Jenkins має понад 1800 плагінів, створених спільнотою. Ці плагіни охоплюють різні сфери, як-от збірка, розгортання та автоматизація проектів. Користувачі можуть налаштовувати свої конвеєри CI/CD та розширювати функціональність Jenkins.

Розробники можуть створювати власні плагіни, використовуючи розлогу документацію Jenkins. Також вони можуть додавати плагіни до каталогу Jenkins. Jenkins має активну спільноту, яка допомагає у створенні нових плагінів.

GitLab CI дозволяє підключатися до зовнішніх сервісів для розширення функціональності. Його бібліотека плагінів та розширень менша за Jenkins, але постійно зростає. Оскільки GitLab CI є частиною GitLab, він вже має багато вбудованих функцій.

Користувачі можуть налаштовувати свої робочі процеси за допомогою файлу .gitlab-ci.yml. У цьому файлі ви можете задавати всі завдання, етапи та кроки.

Конвеєри

Jenkins підтримує як декларативний, так і скриптовий синтаксис для створення конвеєрів. Ви можете використовувати будь-який з цих двох підходів, використовуючи веб-інтерфейс або Jenkinsfile. Останній підхід є більш поширеним. Ви можете зберігати описи конвеєрів як Jenkinsfiles в репозиторії, де зберігається вихідний код. Платформа має вбудований графічний веб-інтерфейс для відстеження та візуалізації виконання конвеєра.

У GitLab CI всі конвеєри визначаються файлом .gitlab-ci.yml. Цей файл конфігурації, що базується на YML, зберігається в кореневому каталозі проекту. .gitlab-ci.yml відрізняється простим синтаксисом з набором команд та заздалегідь визначеними ключовими словами, що охоплюють найбільш поширені завдання CI/CD. GitLab CI інтегрований з іншими функціями GitLab, що дозволяє керувати вихідним кодом, відстежувати проблеми, перевіряти код, обробляти запити на злиття тощо.

Як Встановити Jenkins

Перш ніж інсталювати Jenkins на ваш комп’ютер, вам потрібне середовище виконання Java (JRE). Завантажте Java з офіційного сайту, обравши версію, що відповідає вашій операційній системі. У прикладі буде використано Ubuntu.

Якщо ви використовуєте іншу операційну систему, скористайтеся покроковою інструкцією зі статті про встановлення Jenkins.

Для Ubuntu виконайте такі дії:

Крок 1: Перевірте, чи встановлено JRE. Виконайте цю команду:

java -version

Якщо JRE встановлено, ви отримаєте щось подібне:

В даному прикладі встановлено версію “17.0.6”, але у вас може бути інша.

Крок 2: Імпортуйте ключ GPG у вашу систему за допомогою цієї команди:

curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null

Крок 3: Додайте репозиторій програмного забезпечення Jenkins за допомогою цієї команди:

echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null

Крок 4: Оновіть систему:

sudo apt update

Крок 5: Встановіть Jenkins:

sudo apt install jenkins -y

Крок 6: Перевірте, чи встановлено Jenkins:

sudo systemctl status jenkins

Якщо все встановлено правильно, ви побачите щось схоже:

Натисніть `ctrl+z` на клавіатурі, щоб вийти та перейти до наступного кроку.

Крок 7: Змініть налаштування брандмауера Jenkins. Використайте цю команду:

sudo ufw allow 8080

Крок 8: Перевірте статус брандмауера:

sudo ufw status

Крок 9: Якщо на попередньому кроці статус “Неактивний”, увімкніть брандмауер:

sudo ufw enable

Крок 10: Відкрийте Jenkins у браузері, ввівши наступне у адресний рядок:

http://localhost:8080

Крок 11: Отримайте “пароль адміністратора”, виконавши цю команду:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

Крок 12: Розблокуйте Jenkins.

Скопіюйте пароль з термінала та вставте його у діалогове вікно “Пароль адміністратора”, що відкрилось на десятому кроці, а потім натисніть “Продовжити”.

У новому вікні вам буде запропоновано встановити плагіни. Ви можете обрати стандартні та перейти до наступного кроку.

Крок 13: Створіть обліковий запис, “збережіть та продовжте”.

Крок 14: Налаштуйте параметри та починайте використовувати Jenkins.

Як Встановити GitLab CI

GitLab CI є частиною GitLab. Щоб отримати GitLab CI, потрібно спочатку встановити GitLab Runner, агента, який виконує всі завдання та передає їх до GitLab.

У прикладі буде використано Ubuntu. Для інших операційних систем, перевірте офіційну документацію. Для Ubuntu виконайте наступні дії:

Крок 1: Оновіть та налаштуйте систему:

sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl

Ви можете налаштувати електронну пошту для отримання оновлень або пропустити цей крок.

Крок 2: Додайте репозиторій пакетів GitLab:

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash

Крок 3: Налаштуйте обліковий запис GitLab.

Існує декілька варіантів розміщення GitLab. Дотримуйтесь інструкцій, що відповідають вашому вибору.

Крок 4: Перевірте ім’я хоста та увійдіть. Введіть цю команду в терміналі, щоб отримати пароль:

/etc/gitlab/initial_root_password

Необов’язково: Налаштуйте параметри зв’язку, щоб отримувати оновлення продуктів та новини від GitLab.

Обмеження Jenkins

  • Jenkins може бути складним у налаштуванні для великих проектів.
  • Якщо Jenkins не налаштовано належним чином, він може бути вразливим до атак.
  • Масштабування великих проектів за допомогою Jenkins може бути складним.
  • Jenkins може споживати багато ресурсів під час запуску великої кількості одночасних збірок.

Обмеження GitLab CI

  • GitLab CI може бути складним у налаштуванні для великих проектів.
  • Залежить від GitLab.
  • Масштабованість є проблемою для великих проектів.
  • Екосистема плагінів менша порівняно з Jenkins.

Думка Автора

GitLab CI і Jenkins є чудовими інструментами у життєвому циклі розробки програмного забезпечення. Якщо вам потрібна більш зріла платформа з повним контролем над налаштуваннями, Jenkins є чудовим вибором. З іншого боку, GitLab CI є привабливим завдяки своєму інтерфейсу та перевазі інтеграції з GitLab.

Сподіваємося, тепер ви розумієте відмінності між GitLab CI та Jenkins. Ці два інструменти призначені для виконання схожих функцій, але відрізняються можливостями та способами реалізації цих функцій. Вибір між ними залежить від специфіки вашого проекту, навичок, смаку та вподобань.

Тепер ви можете переглянути ці платформи хостингу Jenkins.