Упс! Не вдала спроба:(
Будь ласка, спробуйте ще раз.

Як користуватися Jenkins. Поради QA-фахівців NIX

IT-команда NIX
IT-команда NIX
20 вересня 2023 14 хвилин читання

Сучасна розробка побудована навколо концепції CI/CD, яку складно реалізувати без такого інструмента, як Jenkins. Фактично він став стандартом для фахівців. Jenkins безкоштовний, працює з будь-якою операційною системою, його легко налаштувати та підтримувати. Вміти користуватися ним мають як розробники та DevOps, так і QA-автоматизатори. Найголовнішим про Jenkins діляться QA-спеціалісти команди NIX.

Але перш ніж розглянути архітектуру та функціонал Jenkins, пропонуємо розібратись із базовою теорією про CI/CD. Тут маємо два поняття: Continuous Integration та Continuous Delivery.

  • Continuous Integration — це безперервна інтеграція

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

Continuous Integration Continuous Integration
  • Continuous Delivery — це безперервна доставка

CI-сервер відстежує оновлення на майстер-гілці. Після їх виявлення збирає проєкт, створює артефакт у вигляді архіву — WAR або JAR-файлу (залежно від налаштувань) та деплоїть його на Stage- або Prod-сервер. Завдання розробників те саме — мержити чейнджі в основну гілку. Далі все відбудеться автоматично.

Continuous Delivery Continuous Delivery

Ідея CI/CD Pipeline об’єднує це все в один великий конвеєр. Розробники працюють над кодом та роблять комміти. Далі CI-сервер збирає проєкт і проганяє інтеграційні та юніт-тести. А після рев’ю все вирушає на Stage і Prod. За автоматизацію відповідає Jenkins. Доставка продукту на сервери проходить безперервно та з мінімальними зусиллями з боку розробників. Від них потрібно лише переглядати результати роботи Jenkins та рев’юїти код після фейлів. Такий підхід спрощує роботу команд та прискорює розробку, що цінують і девелопери, і клієнти.

CI/CD Pipeline CI/CD Pipeline
Як користуватися Jenkins. Поради QA-фахівців NIX Як користуватися Jenkins. Поради QA-фахівців NIX

Що таке Jenkins

Jenkins — це сервер, який підтримує концепцію Continuous Integration. Він написаний на Java, але працює з будь-якими мовами. Ви можете писати код хоч на Python, хоч на C# — для Jenkins це неважливо. У будь-якому разі інструмент збере проєкт так, як ви йому скажете і зробить деплой на сервер, який ви прив’язали до Jenkins.

Розглянемо його інтерфейс та основні функції. На ілюстрації нижче зображено всі джоби. Джоба (тобто job) — це елемент Jenkins, в якому відбувається збірка проєкту.

Інтерфейс Jenkins Інтерфейс Jenkins

Jenkins як сервер має комп’ютер-майстер і підлеглі комп’ютери (Slave або Node). Перший комп'ютер роздає завдання, а інші — виконують їх. Але в моєму прикладі на комп’ютері знаходяться і майстер, і ноди (в нижній частині екрану). В результаті маємо три комп’ютери, які на старті перебувають в очікуванні роботи.

Інтерфейс Jenkins Інтерфейс Jenkins

Розгортаємо сервер на локальному хості. Це зручно для перевірок, випробувань та підтримки проєкту, наприклад, якщо ви працюєте у стартапі. Але якщо плануєте робити так само, пам'ятайте про безпеку. Реалізуйте ці кроки в корпоративній мережі, додайте креди та унікальні хости (а не стандартний 8080).

Базові налаштування Jenkins

При запуску у розділі Manage Jenkins ви побачите повідомлення: про нову версію, оновлення плагінів тощо.

Базові налаштування Jenkins Базові налаштування Jenkins

Нижче розміщено кнопки конфігурації. Одна з найважливіших — Plugin Manager. Тут зібрані різні плагіни:

Базові налаштування Jenkins Базові налаштування Jenkins

Плагіни розширюють функціонал Jenkins. Їх існує тисячі, причому різних: від картинок з Чаком Норрісом до справді важливих фіч. Сам собою сервер порожній, і навіть Git треба налаштовувати через такі розширення. У цьому немає нічого складного: достатньо завантажити потрібний плагін. Припустимо, ваш проєкт на Python, і ви хочете знайти для нього розширення. Вводите ключове слово у пошуку й отримаєте список плагінів:

Базові налаштування Jenkins Базові налаштування Jenkins

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

Базові налаштування Jenkins Базові налаштування Jenkins

Крім Plugin Manager, на сторінці налаштувань є й інші цікаві блоки. Наприклад, Global Tool Configuration. У цьому розділі зібрані найважливіші налаштування Jenkins. Як вже згадувалось вище, цей сервер написаний на Java. Тому для роботи потрібен Java Development Kit. В останніх версіях Jenkins підключення виконується автоматично: Jenkins сам знаходить на комп’ютері Java-машину. Але якщо щось пішло не так, потрібно зайти до Global Tool Configuration і звернутися до Maven Configuration. Збирання виконується за допомогою Maven.

Базові налаштування Jenkins Базові налаштування Jenkins
Базові налаштування Jenkins Базові налаштування Jenkins

Також тут є Gradle, якщо вам потрібно додати його:

Базові налаштування Jenkins Базові налаштування Jenkins

Підписуйтеся на наші соцмережі

А ще — пункт Git. У мене стоїть Default, оскільки Jenkins вже знайшов Maven на комп’ютері. Але ви завжди можете вручну прописати шлях, щоб усе працювало стабільно. Jenkins потребує Git для скачування проєкту з репозиторію, а збирача проєктів — для білда.

Базові налаштування Jenkins Базові налаштування Jenkins

Налаштовуємо джоби в Jenkins

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

Налаштування джобів в Jenkins Налаштування джобів в Jenkins

Нижче наведено всі збірки. Зверніть увагу на color coding. Завдяки червоним та зеленим міткам ви можете швидко оцінити, які збірки пройшли, а які зафейлились. Другий важливий момент — визначення часу запуску білда. Так ви можете відстежувати, коли востаннє збиралася програма.

Налаштування джобів в Jenkins Налаштування джобів в Jenkins

QA-автоматизатори точно оцінять Build Time Trend. Тут показано час, протягом якого тривало кожне збирання. Це дозволяє побачити проблеми, наприклад, із сервером. Також можна оцінювати середній час збирання, щоб розуміти, коли чекати фідбек від системи та в разі чого готуватися до виправлення помилок. Мої збірки мають 30-40 секунд, бо я взяла для прикладу маленький проєкт. Зазвичай тривалість набагато більша.

Налаштування джобів в Jenkins Налаштування джобів в Jenkins

Ви можете звернутися до налаштувань конкретної джоби. Функціонал цього меню однаковий для всіх джоб: і нових, і поточних. Тут у Description я написала, що тестую конкретну сторінку. Краще не пишіть щось на кшталт Small Test. Важливо, щоб ваші колеги розуміли з цього опису, що робить конкретна джоба.

Налаштування джобів в Jenkins Налаштування джобів в Jenkins

У налаштуваннях джоби є пункт Source Code Management. Тут ви вказуєте, що є Git, і проєкт можна взяти за конкретним посиланням. Завдяки цьому Jenkins зрозуміє, звідки клонувати проєкт. Крім URL-адреси можна вказати SSH та додати креди. Це підвищить захист проєкту від небажаних змін.

Налаштування джобів в Jenkins Налаштування джобів в Jenkins

Важливий пункт для тестувальників-автоматизаторів — Build Triggers. Тут ви вказуєте періодичність збирання проєкту. Наприклад, щодня о 08:00 чи навіть раз на рік. При цьому в інтерфейсі детально розписано, як налаштовувати цей параметр. Дуже зручно, бо не треба вручну запускати тести на UI чи API. Ви можете задати запуск тестів вночі, а вранці побачити результати:

Налаштування джобів в Jenkins Налаштування джобів в Jenkins

Також у Build Triggers можна вказати точний розклад перевірок Git. Це особливо зручно для великих команд, де багато розробників та автоматизаторів. Для прикладу я задала системі перевіряти наявність апдейтів у Git щохвилини. Якщо Jenkins знаходить зміни та нові комміти, він клонує проєкт і починає збирання. Звичайно, такий розклад не обов’язковий. Для автотестів вистачить запуску раз на добу. Все індивідуально та залежить від проєкту.

Налаштування джобів в Jenkins Налаштування джобів в Jenkins

У пункті Bild вказуйте, що потрібно робити з вашим білдом:

Налаштування джобів в Jenkins Налаштування джобів в Jenkins

Можете обрати з готових кроків: наприклад, Execute Windows або Execute shell для Linux. Я прописала mvn clean test. У результаті Jenkins пройде всі етапи: очищення та верифікація коду, компіляція, тести і насамкінець збирання.

Налаштування джобів в Jenkins Налаштування джобів в Jenkins

Останній пункт у налаштуваннях джоби — Post Build Action. У ньому треба обрати, що Jenkins робитиме після білда. Завершивши збирання, він може надсилати листа з результатами білда. Також є можливість створювати різні звіти:

Налаштування джобів в Jenkins Налаштування джобів в Jenkins

Як білдити проєкт за допомогою Jenkins

Після всіх налаштувань джоби можна білдити проєкт вручну. Але в розрізі статті корисніше розглянути, як відбувається саме pipeline. У цьому випадку я створила кілька простих тестів для перевірки сторінок певного функціоналу:

Як білдити проєкт за допомогою Jenkins Як білдити проєкт за допомогою Jenkins

Для прикладу можна розкоментувати один із безлічі локаторів, які не використовуються...

Як білдити проєкт за допомогою Jenkins Як білдити проєкт за допомогою Jenkins

Для цього прописуємо uncomment locators, робимо комміт та пушимо до репозиторію...

Як білдити проєкт за допомогою Jenkins Як білдити проєкт за допомогою Jenkins

Згідно з налаштуваннями, Jenkins щохвилини перевіряє зміни в Git, а при виявленні завантажує їх та запускає збирання. Не зважайте на зелену галочку — це лише результат попередніх збірок. Наші «колірні» результати буде видно лише після поточного збирання.

Як білдити проєкт за допомогою Jenkins Як білдити проєкт за допомогою Jenkins

Тим часом в основному меню ви можете побачити, який комп’ютер зайнятий збіркою, а які — вільні для інших завдань:

Як білдити проєкт за допомогою Jenkins Як білдити проєкт за допомогою Jenkins

Ще цікавий нюанс: позначки у стилі погоди. Наприклад, хмара показує, що окремі збірки зафейлилися, але загалом усе гаразд. Якби всі збірки були зелені, тоді б тут «‎світило» сонечко:

Як білдити проєкт за допомогою Jenkins Як білдити проєкт за допомогою Jenkins

У результаті наша збірка виявилася успішною. Але в реальних проєктах так буває рідко. Тому варто розглянути, як відбувається фейл проєкту й як у такому разі поводиться Jenkins. Для цього відправимося до тих же локаторів і закомітімо: t [text () = 'Hello']. Тут точно немає такого локатора:

Як білдити проєкт за допомогою Jenkins Як білдити проєкт за допомогою Jenkins

Закоммітимо, щоб було зрозуміло, який локатор змінився. Після цього натискаємо на Commit and Push. А далі залишається чекати, як на це відреагує збирач проєктів.

Як білдити проєкт за допомогою Jenkins Як білдити проєкт за допомогою Jenkins

За часом проходження тестів можна подивитися, як працює ваш сервер. Наприклад, якщо при API-тестах час збільшується вдвічі, це ознака проблем в системі. А ще після початку збирання можна натиснути на спеціальну кнопку в бічному меню і вибрати Console Output. Це дозволить у режимі реального часу відстежувати, що Jenkins робить з проєктом. А саме — розписує всі свої кроки: зайшов сюди, зайшов туди, почав збирання тощо:

Як білдити проєкт за допомогою Jenkins Як білдити проєкт за допомогою Jenkins
Як білдити проєкт за допомогою Jenkins Як білдити проєкт за допомогою Jenkins

У цьому прикладі можете бачити Running to do list test — це назва класу. Або, скажімо, є вказівка, що Jenkins запустив Chrome Driver. У цьому розділі немає color coding, через що складніше вловити суть процесів одним поглядом. Але загалом усе написано доступно.

Як білдити проєкт за допомогою Jenkins Як білдити проєкт за допомогою Jenkins

Також Jenkins відображає warning та info. Ви можете задати логування, і система пропише логи або виведе помилки залежно від ваших побажань. Якщо Jenkins знаходить помилку, то час прогону тестів помітно збільшується, після чого з’являється такий червоний символ:

Як білдити проєкт за допомогою Jenkins Як білдити проєкт за допомогою Jenkins

Щоб розібратися в причинах проблеми, зверніться до нижньої частини репорту. Зазвичай Jenkins позначає повідомлення про помилку компіляції коду за допомогою індексу at. У наведеному прикладі система прописує: element location, find element тощо. Тобто Jenkins ніби каже: «‎У вас щось не так із локатором, я не зміг до нього звернутися». Більше того — він навіть вказує на метод.

Як білдити проєкт за допомогою Jenkins Як білдити проєкт за допомогою Jenkins

Нижче бачимо підсумок: заранились три тести, впали — два.

Як білдити проєкт за допомогою Jenkins Як білдити проєкт за допомогою Jenkins

При детальному вивченні звіту можна знайти вказівку на конкретний локатор. Хоча це більше залежить від налаштувань логування на вашому проєкті.

Як білдити проєкт за допомогою Jenkins Як білдити проєкт за допомогою Jenkins

В основному меню Jenkins ви побачите відповідну позначку про фейли навпроти останнього білда:

Як білдити проєкт за допомогою Jenkins Як білдити проєкт за допомогою Jenkins

Поради для ефективної роботи з Jenkins

  • Читайте документацію

До неї варто звертатися не лише тоді, коли вам щось не вдалося. Найкраще вивчати офіційну документацію відразу після перегляду мануалів на YouTube та установки Jenkins. У документації ви знайдете все: від налаштувань для різних ОС до відео від спеціалістів зі способами конфігурації під їхні проєкти. Інформація подається дуже просто.

  • Створюйте короткі тест-сьюти

Не варто задавати багато тестів на один білд. Це позначиться на тривалості збирання проєкту. Якщо після фейлу ви внесете зміни, закинете їх майстру і запустите тест-сьют на годину, навряд чи це сподобається команді. Людям доведеться чекати, поки ви побачите, де виникла проблема: у тестах чи в програмі. Тому краще робити короткі сьюти — не більше 15-20 хвилин. Або ще варіант — запускати тести паралельно в самому коді. Це помітно прискорить усі процеси та отримання зворотного зв’язку.

  • Позбавляйтеся старих білдів

У своєму прикладі я показала 12 збірок, і комп’ютер працював із двома джобами. Це нормальні показники: комп’ютер виконує свої завдання швидко. Але якщо уявити великий проєкт, де одна команда має 12 джоб, друга — ще 12, а третя — 10, то збірки займатимуть занадто багато місця. Тому сервер працюватиме не так добре, як міг би. Щоб уникнути цього, задайте спеціальні налаштування. Наприклад, зберігати тільки останні п'ять збірок. Цього цілком достатньо, аби давати адекватну загальну картину про стан програми і тестів.

  • Використовуйте кращі практики пайплайнів

Шукайте best practices в офіційній документації. Розробники Jenkins описали чимало завдань, з якими ви можете зіткнутися на практиці. Тому фахівці, які працюють із цим інструментом багато років, при появі будь-якої проблеми спершу йдуть читати документацію Jenkins.

Підписуйтеся на наші соцмережі

Якщо ви хочете поділитися з читачами SPEKA власним досвідом, розповісти свою історію чи опублікувати колонку на важливу для вас тему, долучайтеся. Відтепер ви можете зареєструватися на сайті SPEKA і самостійно опублікувати свій пост.
50 UAH 150 UAH 500 UAH 1000 UAH 3000 UAH 5000 UAH
0
Прокоментувати
Інші матеріали

Інтерв’ю з Сергієм Леськом, IT-директором OKKO

Олександр Тартачний 39 хвилин тому

Топ-5 помилок біздева на міжнародній конференції

Maksym Boronenko 13 годин тому

У Києві відбудеться конференція «Навігатори інновацій. Змінюй правила гри»

Ольга Топольська 17 годин тому

Ринок Перської затоки для українського ІТ: що потрібно знати

Анатолій Моткін 3 липня 2024 05:53

25 липня стартує масштабна конференція TechFin Expert Summit 2024

Ольга Топольська 2 липня 2024 16:25