Що таке Jenkins?

Jenkins — це безоплатний та один із найпопулярніших open-source інструментів для автоматизації процесів розробки та розгортання ПЗ. Він повністю базується на Java і використовується для налаштування безперервної інтеграції (CI) та безперервного розгортання (CD).
Історія появи Jenkins
У 2004 році Косуке Кавагуті, інженер з компанії Sun Microsystems, прагнув поліпшити процес створення коду та виправлення багів й створив сервер автоматизації Hudson.
У 2011 році, Oracle (яка придбала Sun Microsystems) мали суперечності зі спільнотою відкритих кодів на цьому проєкті. Оскільки Oracle мала інші плани для розвитку Hudson, команда під керівництвом Кавагуті вирішила зробити форк і створити новий проєкт, який отримав назву Jenkins.
Коли Jenkins відокремився, він почав швидко здобувати популярність серед розробників і продовжує робити це зараз. Відкритий код і наявність великої спільноти стали основними чинниками успіху. Jenkins став одним із найпопулярніших інструментів для CI/CD.
Основні функції Jenkins
- Безперервна інтеграція (CI)
Jenkins автоматично перевіряє код. Запускає збірку і тести після кожної зміни, щоб знайти помилки. - Безперервне розгортання (CD)
Автоматично розгортає нові версії програм у потрібних середовищах. - Масштабування через агентів
Розподіляє завдання між кількома комп’ютерами для швидшої роботи. - Інтеграція з іншими інструментами
Інструмент підключається до різних сервісів і платформ. - Пайплайни
Jenkins створює автоматизовані етапи для збирання, тестування та деплою програм. - Моніторинг і сповіщення
Показує статус збірки та повідомляє, якщо щось пішло не так. - Гнучкість налаштувань
Є можливість зберігати налаштування у вигляді скриптів і використовувати їх знову. - Безпека та доступ
Можна налаштовувати доступи до документів для окремих осіб.
Як працює Jenkins?
Jenkins працює як сервер автоматизації на Windows, macOS, Unix і, найчастіше, на Linux. Для його запуску потрібна Java (Oracle JRE або OpenJDK) версії 8 або новішої. Найпоширеніший спосіб розгортання — запуск як Java-сервлет на сервері Jetty, хоча можна використовувати й Apache Tomcat або інші сервери додатків. Його можна інсталювати через .war
-файл, пакет для відповідної ОС, Homebrew, Docker-образ або навіть з вихідного коду.
Коли Jenkins запускається вперше, він автоматично створює адміністративний акаунт з унікальним паролем, який потрібно ввести для початкового налаштування. Всі конфігурації та дані зберігаються у локальному сховищі у вигляді звичайних текстових файлів. Основний файл конфігурації — Jenkinsfile, який визначає етапи виконання процесів. Він використовує синтаксис, схожий на JSON, де кожен крок оформлений у фігурних дужках і описаний відповідною командою. Його можна написати вручну або створити через графічний інтерфейс.
Коли розробник додає зміни до репозиторію, Jenkins автоматично завантажує оновлений код, забирає його, запускає тести та виконує необхідні процеси. Перед тим як випустити оновлення в продакшн, код може бути протестований у спеціальному середовищі (UAT). Якщо всі перевірки проходять успішно, зміни зливаються в основну гілку, і Jenkins автоматично розгортає оновлення без ручного втручання.
Типи інсталяцій Jenkins
Інструмент можна встановити різними способами, залежно від масштабу та потреб проєкту.
- Самостійна інсталяція
Jenkins розгортається на одному сервері або локальному комп’ютері. Це підходить для невеликих команд чи особистого використання. - Кластерна інсталяція
Це означає, що Jenkins працює не на одному сервері, а в розподіленій системі. Завдяки цьому багато процесів обробляється одночасно, а навантаження розподіляється рівномірно. - Хмарне розгортання
Jenkins можна запустити в хмарі (AWS, Google Cloud, Azure).
Найпопулярніші кейси використання Jenkins
Ось декілька відомих організацій, які використовують Jenkins:
IBM: глобальна технологічна компанія, що застосовує інструмент для автоматизації своїх процесів розробки та забезпечення якості.
Cognizant Technology Solutions: провідна IT-компанія, яка використовує Jenkins для оптимізації своїх CI/CD-процесів.
JPMorgan Chase Bank, N.A.: один з найбільших банків у світі, що впровадив Jenkins для автоматизації фінансових додатків та сервісів.
CGI: міжнародна IT-консалтингова компанія, що використовує інструмент для автоматизації процесів розробки та тестування.
Visa: платіжна система світового масштабу, що застосовує Jenkins для підтримки та розвитку своїх платіжних сервісів.
Northrop Grumman: американська аерокосмічна та оборонна компанія, яка використовує Jenkins для автоматизації розробки складних систем.
Переваги для DevOps
- Інструмент самостійно запускає збірку, тестування та розгортання після змін у коді, що прискорює випуск оновлень і зменшує ризик людських помилок.
- Jenkins підтримує інтеграцію з різними інструментами. Якщо тобі потрібна автоматизація, то він працює з Git, GitHub, GitLab, Bitbucket та Jira. Для контейнеризації та оркестрування застосовуй Docker, Kubernetes чи OpenShift. У конфігураційному менеджменті інтегрується з Ansible, Terraform, Puppet, а для тестування та контролю якості – Selenium, JUnit і SonarQube.
- Завдяки розподіленій архітектурі можна запускати завдання на різних вузлах, що забезпечує швидке виконання навіть для великих команд.
- Використання Jenkinsfile та декларативних пайплайнів дає змогу легко змінювати налаштування, зберігати їх у репозиторії разом з кодом і переносити між різними середовищами.
- Jenkins може автоматично запускати тести після кожного оновлення коду.
Популярні плагіни Jenkins
- Git Plugin
Дозволяє інтегрувати Jenkins з різними репозиторіями Git (GitHub, GitLab, Bitbucket) й автоматично запускає процеси збірки після змін у коді. - Docker Plugin
Дозволяє запускати контейнери для тестування, збірки та розгортання застосунків у Docker. - Pipeline Plugin
Дає змогу створювати складні пайплайни CI/CD, використовуючи декларативний синтаксис у Jenkinsfile. - Kubernetes Plugin
Інтегрує Jenkins з Kubernetes і створює можливість автоматично запускати завдання на кластерах Kubernetes. - SonarQube Plugin
Плагін для інтеграції з SonarQube для статичного аналізу коду, який автоматично перевіряє якість коду під час процесу CI/CD. - Ansible Plugin
Інтегрує Jenkins з Ansible для автоматизації налаштування серверів, управління інфраструктурою та деплоєм застосунків. - JUnit Plugin
Підтримує JUnit для виконання тестів та відображення результатів у Jenkins. - Slack Notification Plugin
Підключає Jenkins до Slack, надсилаючи сповіщення про статус завдань (успіх/помилки) безпосередньо в канал команди.