Jenkins: особливості архітектури та використання

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

Що таке Jenkins

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

Jenkins має такі переваги:

  • адаптивність та гнучкість, оскільки Jenkins побудований на Java і працює на різних платформах;
  • потужна система плагінів, що дозволяють Jenkins інтегруватися з великою кількістю інструментів, як, наприклад, Git, Maven і Docker;
  • масштабованість, тому що Jenkins може працювати з великомасштабними проєктами, розподіляючи збірки між кількома агентами. Ці агенти можуть бути окремими машинами або віртуальними середовищами, які розвантажують обчислювальну потужність, необхідну для складних білдів;
  • відкритий код з доступом до безлічі ресурсів та підтримки, а також постійний розвиток інструменту.

Для чого айтівці використовують Jenkins

Популярність інструмента Jenkins пов’язана з тим, що він здатен відстежувати та контролювати повторювані дії, які необхідні протягом розробки проєкту. Наприклад, Jenkins може постійно тестувати білди та попереджати про будь-які помилки на ранній стадії. Основні варіанти використання Jenkins — це:

  • розгортання коду на продакшені

Якщо всі тести пройдені успішно, Jenkins може автоматично опублікувати код на середовищах stage і prod. Зміни в коді внесені і готові до об’єднання з основним кодом, але цей процес ще не відбувся. Потім код розподіляється у середовище препродакшену або навіть у продакшен.

  • автоматизація завдань

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

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

  • полегшення CI-процесів

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

  • спрощення траблшутингу

Коли Jenkins виконує певні завдання, він виводить дані з консолі з параметрів stdout і stderr. Це робить пошук та усунення ймовірних несправностей за допомогою Jenkins надзвичайно простим та швидким.

Архітектура Jenkins

Jenkins працює наступним чином.

Крок 1. Розробники вносять зміни у вихідний код, який знаходиться в репозиторії, далі сервер Jenkins CI перевіряє репозиторій через регулярні проміжки часу та витягує будь-який новий доступний код. 

Крок 2. Сервер збирає код у файл, що буде виконуватися. У разі виникнення проблем розробникам надсилається сповіщення.

Крок 3. Jenkins розгортає білд на тестовому сервері. Якщо тест неуспішний, розробники отримують сповіщення.

Крок 4. Якщо у коді немає помилок, перевірена програма розгортається на продакшені.

Файли можуть містити різний код і бути дуже великими, тому з’являється потреба у кількох білдах. Однак один сервер Jenkins не може обробляти декілька файлів і білдів одночасно, тому для таких проєктів необхідна розподілена архітектура Jenkins.

Ключові компоненти Jenkins — це Master Node та Agent Nodes/Clouds.

Загальна архітектура Jenkins виглядає так:

Розгляньмо ці компоненти окремо.

Jenkins Master Node

Сервер Jenkins (головний вузол) містить усі ключові конфігурації. Майстер-нода Jenkins схожа на керівний сервер, який організовує весь робочий процес, визначений у конвеєрах, як планування завдань, моніторинг завдань тощо.

Ключові компоненти Jenkins Master Node:

  • Jenkins Jobs — набір кроків, за допомогою яких можна зібрати вихідний код, протестувати його, запустити скрипт командного рядка тощо. Зазвичай це називається пайплайном або конвеєром;
  • Jenkins Plugins — модулі, розроблені спільнотою, які можна встановити на свій сервер Jenkins. Дозволяють отримати більше функцій, які типово не доступні в Jenkins;
  • Jenkins Credentials — іноді для налаштування пайплайну Jenkins необхідно прописати сценарій, де інструменту потрібно під’єднатися до хмарного облікового запису, сервера, бази даних або кінцевої точки API з використанням секретів;
  • Jenkins Nodes/Clouds — можна налаштувати декілька вузлів агентів (Linux, Windows) або хмар (Docker, Kubernetes) для виконання завдань;
  • Jenkins Global Config — можна налаштувати всі конфігурації встановлених плагінів та власні глобальні конфігурації Jenkins.

Jenkins Agent

Агенти Jenkins — це робочі вузли, які фактично виконують всі кроки, вказані у завданні. Під час створення завдання для Jenkins, необхідно призначити йому агента. Кожен агент має певну мітку, що є унікальним ідентифікатором.

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

Є 2 типи Jenkins-агентів:

  • вузли — це сервери (Windows/Linux), що будуть налаштовані як статичні агенти. Ці агенти будуть постійно працювати і залишатися на зв’язку з сервером Jenkins; 
  • хмари — це динамічні агенти. Кожного разу, коли ти запускаєш завдання, агент за потребою розгортається як віртуальна машина або контейнер і видаляється після завершення завдання.

Післяслово

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

Jenkins — один з кращих CI/CD-інструментів, отже він є необхідним у роботі DevOps-інженера. Якщо ти тільки плануєш освоїти цю професію, рекомендуємо пройти курс «DevOps з нуля». Протягом 9 місяців ти не тільки засвоїш теорію, що необхідна для роботи, але й отримаєш практичний досвід використання багатьох DevOps-інструментів.

Залишити відповідь

Дякуємо, що поділились