Jenkins — система непрерывной интеграции¶
Jenkins — это бесплатная открытая система автоматизации сборки, тестирования и развёртывания программного обеспечения, написанная на Java. Она является одним из наиболее распространённых инструментов практики непрерывной интеграции и непрерывной доставки (CI/CD) в мире. Jenkins позволяет настраивать конвейеры (pipeline), которые автоматически выполняют повторяющиеся задачи: компиляцию кода, запуск тестов, сборку артефактов, публикацию документации и развёртывание приложений на целевых серверах.
¶История
Проект был создан в 2004 году американским разработчиком Кэссиеном Ландэем (Kohsuke Kawaguchi), работавшим в то время в компании Sun Microsystems. Первоначальное название инструмента — Hudson. Ландэй устал вручную запускать сборки своих проектов и написал утилиту, которая делала это автоматически.
После того как Oracle в 2010 году приобрела Sun Microsystems, между Oracle и сообществом разработчиков Hudson возникли разногласия по поводу товарного знака и управления проектом. В январе 2011 года основная часть сообщества разработчиков форкнула проект и переименовала его в Jenkins. Oracle продолжила развивать Hudson, но проект постепенно утратил популярность, а Jenkins стал де-факто основной веткой. В 2017 году Oracle официально передала товарный знак Hudson сообществу Jenkins.
¶Устройство и архитектура
Jenkins построен по расширяемой архитектуре. Ядро системы выполняет базовые функции планирования и маршрутизации задач, а вся дополнительная функциональность реализуется через плагины. На начало 2020-х годов в официальном репозитории доступно более 1800 плагинов, что позволяет интегрировать Jenkins практически с любым популярным инструментом: системами контроля версий (Git, Subversion), менеджерами сборки (Maven, Gradle, npm), контейнерными платформами (Docker, Kubernetes), системами мониторинга и уведомлений.
Ключевые архитектурные понятия:
- Job (задача) — единица работы, описывающая, что и как должен сделать Jenkins.
- Executor (исполнитель) — логический слот на агенте, в рамках которого выполняется сборка. Количество исполнителей определяет параллельность.
- Agent (агент, ранее «slave») — удалённая машина, на которой выполняются задачи. Агенты позволяют распределять нагрузку между несколькими серверами.
- Master (мастер-сервер) — центральный узел, управляющий агентами, хранящий конфигурации и предоставляющий веб-интерфейс.
- View — способ группировки и отображения задач в интерфейсе.
¶Pipeline
С 2016 года в Jenkins активно развивается механизм Pipeline, описывающий процесс сборки в виде кода. Pipeline может быть записан в двух форматах:
- Declarative Pipeline — структурированный, более простой синтаксис, рекомендуемый для большинства сценариев.
- Scripted Pipeline — гибкий скриптовый синтаксис на базе Groovy, дающий полный контроль над логикой.
Pipeline хранится в файле Jenkinsfile вместе с исходным кодом проекта, что позволяет версионировать процесс сборки и изменять его через стандартный процесс ревью кода.
¶Установка и развёртывание
Jenkins распространяется в нескольких формах:
- как самостоятельный пакет (
.war-файл), запускаемый на любой Java-платформе; - как системный пакет для Linux (
.deb,.rpm); - как Docker-образ;
- как Helm-чарт для Kubernetes.
Для работы требуется установленная Java (JDK 11 или 17 в актуальных версиях). После первого запуска Jenkins генерирует временный пароль администратора, который хранится в файле на сервере. Далее предлагается установить набор рекомендуемых плагинов и создать учётную запись.
¶Применение
Jenkins применяется в следующих основных сценариях:
- Непрерывная интеграция — автоматическая сборка и тестирование каждого коммита.
- Непрерывная доставка — автоматическая подготовка и, при необходимости, публикация релизов.
- Автоматизация регрессионного тестирования — запуск тестов по расписанию или по триггеру.
- Сборка и публикация артефактов — создание пакетов, образов Docker, документации.
- DevOps-автоматизация — развёртывание инфраструктуры, управление конфигурацией.
Среди известных пользователей Jenkins — компании Facebook (продукт Meta, признанной экстремистской и запрещённой в РФ), Netflix, eBay, NASA, а также множество российских IT-компаний и банков.
¶Альтернативы
Основные конкуренты Jenkins на рынке CI/CD-инструментов:
| Инструмент | Тип | Особенности |
|---|---|---|
| GitLab CI/CD | Встроен в GitLab | Тесная интеграция с GitLab |
| GitHub Actions | Облачный сервис GitHub | Широкий маркетплейс действий |
| TeamCity | Коммерческий (JetBrains) | Мощная встроенная аналитика |
| Bamboo | Коммерческий (Atlassian) | Интеграция с Jira и Bitbucket |
| CircleCI | Облачный/самостоятельный | Управляемая инфраструктура |
¶Критика
Типичные претензии к Jenkins:
- Сложность интерфейса — веб-интерфейс критикуется за неинтуитивность и устаревший дизайн.
- Нагрузка на администрирование — большое количество плагинов создаёт риски несовместимости и требует регулярных обновлений.
- Уязвимости плагинов — исследователи безопасности неоднократно находили критические уязвимости в сторонних плагинах.
- Высокое потребление памяти — Jenkins известен сравнительно высоким потреблением оперативной памяти.
¶Интересные факты
- Jenkins носит имя бутлера английского писателя Джерома К. Джерома из романа «Трое в лодке, не считая собаки».
- Маскот Jenkins — изображение бутлера, разработанное художником-волонтёром сообщества.
- Проект управляется фондом Continuous Delivery Foundation (CD Foundation), входящим в состав Linux Foundation.
¶Источники
- Официальный сайт проекта Jenkins
- Документация Continuous Delivery Foundation
- Kohsuke Kawaguchi. «Welcome to Jenkins» (блог автора проекта)
- Linux Foundation. Continuous Delivery Foundation Annual Reports
