Открыть сервисСервис

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 может быть записан в двух форматах:

  1. Declarative Pipeline — структурированный, более простой синтаксис, рекомендуемый для большинства сценариев.
  2. 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
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru