Бортовой журнал
Бортовой журнал

Когда проект обрастает десятками задач, тестов и релизов, становится очень сложно поддерживать его вручную. Нужно что-то, что возьмет рутину на себя: проверит код, соберет приложение, прогонит тесты и развернет результат на сервере. Именно для этого и используют Jenkins — инструмент, который экономит время и снижает количество ошибок в процессе разработки.

Первым делом — основы

Прежде чем разбираться с Jenkins, стоит понять идею, на которой он держится. Речь о CI/CD — подходе, который сделал процесс разработки быстрее и предсказуемее.

CI (Continuous Integration) — непрерывная интеграция. Этот процесс подразумевает, что изменения в коде регулярно добавляются в общий репозиторий. Каждое новое обновление автоматически проверяется: система собирает проект и запускает тесты, чтобы убедиться, что новые части кода не нарушают работу всего приложения.

CD (Continuous Delivery) — непрерывная доставка. На этом этапе собранное и проверенное приложение автоматически передается в тестовую или рабочую среду. Это позволяет быстрее выпускать обновления, а команде разработки — быстрее получать обратную связь.

CI и CD объединяются в единый конвейер, где все шаги выполняются последовательно. Как правило, он включает:

  • сборку проекта и добавление нового кода к основной версии;
  • тестирование, которое можно провести вручную или сделать автоматическим;
  • релиз, то есть публикацию рабочей версии для пользователей или заказчиков;
  • доработку на основе обратной связи, после чего цикл запускается заново.

Что такое Jenkins

Jenkins — это инструмент, который помогает автоматизировать рутинные задачи в разработке. Он выполняет за вас то, что обычно делается вручную: сборку проекта, запуск тестов, развертывание приложения. Все это объединяется в один поток — так называемый пайплайн.

Главная идея Jenkins в том, чтобы ускорить работу команды и снизить количество ошибок. Вместо того чтобы вручную проверять и переносить изменения, разработчики настраивают процессы один раз, а дальше они выполняются автоматически.

Jenkins можно адаптировать под разные проекты. Благодаря системе плагинов он работает почти с любыми языками программирования, системами контроля версий и инструментами для тестирования или развертывания.

История Jenkins

Jenkins появился в 2004 году. Его автор — разработчик Косукэ Кавагути, который тогда работал в Sun Microsystems. Он создал инструмент для автоматизации сборок и назвал его Hudson. Идея быстро получила отклик: многие команды начали использовать Hudson, чтобы упростить работу с кодом и избавиться от рутинных операций.

К 2010 году вокруг Hudson сформировалось большое сообщество. Однако в 2011 году произошел конфликт между Oracle (которая унаследовала Sun) и участниками сообщества. Вопрос касался прав на управление проектом и торговой марки. В результате разработчики проголосовали за независимое развитие инструмента и дали ему новое имя — Jenkins.

С этого момента Jenkins стал отдельным проектом с открытым исходным кодом. Его развитие взяли на себя сообщество и организация Continuous Delivery Foundation (CDF).

Кто и где использует Jenkins

Jenkins стал одним из самых распространенных инструментов в области CI/CD. Его применяют:

  • Разработчики ПО. Индивидуальные программисты и небольшие команды используют Jenkins, чтобы автоматизировать сборку проектов, проверку кода и запуск тестов.
  • IT-компании и стартапы. Для них Jenkins часто становится основой инфраструктуры DevOps. Благодаря плагинам его можно интегрировать практически с любыми системами контроля версий, облачными сервисами и инструментами мониторинга.
  • Крупный бизнес. Корпорации с распределенными командами применяют Jenkins для построения сложных пайплайнов, где задействованы сотни разработчиков. Система хорошо масштабируется и поддерживает работу с различными окружениями.
  • Образовательные проекты. Jenkins часто используют в университетах и на курсах по DevOps и автоматизации. На его примере легко объяснить базовые принципы CI/CD и показать, как на практике устроена работа конвейера.

Jenkins можно встретить в самых разных сферах: от финтеха и e-commerce до геймдева и телекоммуникаций. Везде, где разработка связана с постоянными изменениями и регулярными релизами, этот инструмент помогает ускорять процессы и снижать количество ошибок.

Возможности Jenkins

Jenkins изначально задумывался как инструмент для автоматизации сборок, но со временем вырос в полноценную платформу для управления всеми этапами разработки и доставки программного обеспечения. Его функциональность охватывает разные уровни CI/CD-процессов и позволяет гибко подстраиваться под потребности команды:

Jenkins как система непрерывной интеграции (CI)

Основная роль Jenkins — автоматизировать процесс интеграции кода. Каждый раз, когда разработчик вносит изменения в репозиторий, Jenkins запускает сборку, проверяет совместимость новых частей с существующим проектом и сразу сообщает об ошибках. Так можно выявить проблемы на ранних этапах.

Jenkins как часть CI/CD-процессов

Jenkins используется не только для интеграции, но и для доставки обновлений. Он связывает между собой сборку, тестирование и развертывание, превращая эти шаги в единый конвейер. Это обеспечивает быстрый и предсказуемый выпуск новых версий программного обеспечения.

Поддержка автоматических сборок, тестов и деплоя

Jenkins умеет:

  • собирать проекты на разных языках и фреймворках;
  • запускать модульные, интеграционные и нагрузочные тесты;
  • автоматически разворачивать приложение в тестовой или рабочей среде;
  • интегрироваться с Docker, Kubernetes, Git и десятками других инструментов.

Установка Jenkins: пошаговая инструкция

Прежде чем начать работать с Jenkins, его нужно установить и подготовить среду.

Так как Jenkins написан на Java, для его запуска требуется установленная Java Virtual Machine (JVM). Без нее сервис просто не запустится.

Как установить Jenkins на Windows

  • Перейдите на Oracle и скачайте актуальный комплект JDK для Windows, например jdk-21_windows-x64_bin.exe.
Изображение 1
  • Запустите установочный файл и следуйте инструкциям установщика.
  • Скопируйте или запомните путь установки, по умолчанию это:

C:\Program Files\Java\jdk-21\

Этот путь понадобится при настройке Jenkins.

Изображение 2
  • Дождитесь окончания установки и закройте окно установщика.
  • Перейдите на  Jenkins и скачайте установочный файл для Windows.
Изображение 3
  • Запустите установочный файл и кликните Next.
Изображение 4
  • Укажите папку, в которую хотите установить Jenkins:
Изображение 5
  • В окне выбора способа запуска измените параметр Run service as local or domain user на Run service as LocalSystem.
Изображение 6
  • Убедитесь, что порт для работы Jenkins установлен по умолчанию — 8080. Протестируйте его с помощью кнопки Test Port и нажмите Next.
Изображение 7
  • На следующем шаге укажите путь к установленной ранее JDK, например:

C:\Program Files\Java\jdk-21\

Изображение 8
  • Согласитесь с установкой предлагаемых компонентов.
Изображение 9
  • Щелкните Install и дождитесь окончания установки.
Изображение 10
  • Закройте окно установщика, нажав Finish.
Изображение 11

Как установить Jenkins на Linux

Для примера возьмем Ubuntu. Инструкция также подойдет для систем на базе Debian.

  • Проверьте наличие Java. Откройте терминал (Ctrl + Alt + T) и выполните:

java -version

Если Java отсутствует (java: not found), установите JDK, например:

sudo apt update

sudo apt install openjdk-17-jdk

  • Добавьте GPG-ключ Jenkins. Он нужен для проверки подлинности пакетов:

curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee \

/usr/share/keyrings/jenkins-keyring.asc > /dev/null

  • Подключите репозиторий Jenkins.

echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \

https://pkg.jenkins.io/debian-stable binary/ | sudo tee \

/etc/apt/sources.list.d/jenkins.list > /dev/null

  • Обновите список пакетов.

sudo apt update

  • Установите Jenkins.

sudo apt install jenkins

  • Запустите Jenkins:

sudo systemctl start jenkins

  • Проверьте статус работы.

sudo systemctl status jenkins

В выводе должно быть: Active: active (running)

  • Настройте брандмауэр. Разрешите SSH и откройте порт 8080 для Jenkins:

sudo ufw allow OpenSSH

sudo ufw enable

sudo ufw allow 8080

  • Проверьте правила брандмауэра.

sudo ufw status

В списке должны появиться строки с 8080/tcp ALLOW Anywhere.

Как зайти в веб-интерфейс Jenkins

Откройте браузер и введите адрес вашего сервера.

Для Ubuntu/Debian это:

http://:8080

А для Windows:

http://localhost:8080

Если служба Jenkins запущена корректно, вы попадете на страницу приветствия и сможете продолжить настройку через веб-интерфейс.

Первичная настройка Jenkins

Дальше мы сосредоточимся на настройке Jenkins под Windows — в целом процесс на Linux будет выглядеть аналогично.

  • Найдите файл с паролем администратора (его путь указан в установщике) и скопируйте содержимое.
Изображение 12
  • Вставьте его в поле Administrator password и нажмите Continue.
  • В окне установки плагинов выберите Install suggested plugins, чтобы загрузить стандартный набор.
Изображение 13
  • Дождитесь окончания установки. Если какой-то плагин не загрузился, нажмите Retry, чтобы повторить попытку.
  • Создайте учетную запись администратора: введите имя пользователя, пароль и электронную почту.
Изображение 14
  • Сохраните данные, нажав Save and Continue.
  • В следующем окне можно настроить Jenkins URL — адрес, по которому будет доступен веб-интерфейс. Значение можно оставить без изменений, если вы работаете локально.
Изображение 15
  • Нажмите Start using Jenkins и перейдите в интерфейс программы.
Изображение 16

Как использовать Jenkins: базовая инструкция

Jenkins готов к работе сразу после установки и первичной настройки. Следующий шаг — научиться создавать проекты и запускать сборки. Начнем с самого простого и разберем, как создать новый проект в Jenkins.

Как создать новый проект в Jenkins

  • Перейдите в веб-интерфейс Jenkins и нажмите кнопку New Item в меню слева.
Изображение 17
  • Введите название проекта в поле Enter an item name. Оно должно быть уникальным.
Изображение 18
  • Выберите тип проекта:
  • «Создать задачу со свободной конфигурацией» (Freestyle project) — универсальный вариант, который подходит для большинства случаев.
  • Pipeline — для описания процесса в виде скрипта. Весь конвейер (сборка, тесты, деплой) задается в виде сценария на языке Groovy.
  • «Мультиконфигурационный проект» — используется, когда нужно протестировать разные конфигурации или платформы.
  • Folder — для группировки задач в папки.
  • Multibranch Pipeline — автоматически создает пайплайны для каждой ветки репозитория.
  • Organization Folder — для организации множества проектов в пределах одной компании или репозитория.
Изображение 19
  • Нажмите кнопку OK, чтобы перейти к настройке.
  • В открывшемся окне настройте проект. К примеру:
  • В поле «Описание» добавьте краткое пояснение, чтобы другим участникам команды было ясно, для чего используется задача.
  • При необходимости отметьте GitHub project и укажите ссылку на репозиторий, если проект хранится на GitHub.
  • В разделе «Управление исходным кодом» настройте подключение к системе контроля версий (например, Git), указав адрес репозитория и при необходимости — учетные данные.
  • В Triggers можно задать условия запуска: например, запускать сборку при каждом изменении в репозитории или по расписанию.
  • В разделе «Шаги сборки» укажите, какие действия Jenkins должен выполнять: компиляция, запуск скриптов, тестов и так далее.
  • В блоке «Послеcборочные операции» настройте дополнительные действия: отправку уведомлений, публикацию артефактов или деплой.
Изображение 20
  • Когда закончите, нажмите Save.

Как подключить GitHub/GitLab-репозиторий

Jenkins может напрямую работать с системами контроля версий. Это позволяет автоматически забирать свежий код из репозитория и запускать сборки при каждом изменении.

Настроить подключение можно и при создании проекта. Но если вы этого не сделали, то:

  • Откройте проект в Jenkins и перейдите в его настройки.
Изображение 21
  • В блоке «Управление исходным кодом» выберите пункт Git.
Изображение 22
  • В поле Repository URL укажите ссылку на ваш репозиторий.
Изображение 23

Если репозиторий приватный, добавьте учетные данные.

  • Укажите ветку, с которой будет работать Jenkins. Чаще всего это main или master.
Изображение 24
  • Сохраните изменения.

Как настроить автоматическую сборку

Чтобы Jenkins сам запускал задачу при изменении кода или по расписанию, нужно настроить триггеры:

  • Откройте нужный проект и нажмите «Настройки».
  • Перейдите в раздел Triggers.
  • Выберите один или несколько вариантов:
  • GitHub hook trigger for GITScm polling — запуск при пуше в GitHub. Потребуется настроить Webhook на стороне репозитория.
  • «Запускать периодически» — выполнение задачи по расписанию. В поле укажите cron-выражение. Например, H 3 * * * означает запуск каждый день в 3:00.
  • «Опрос SCM об изменениях» — Jenkins будет проверять репозиторий через определенные интервалы и запускать сборку, если появились новые коммиты.
  • «Запустить по окончанию сборки других проектов» — полезно, если задачи связаны между собой.
  • Trigger builds remotely — запуск из внешних скриптов по URL с токеном.
Изображение 25
  • Сохраните настройки.

Как настроить автоматический запуск тестов

Чтобы Jenkins запускал тесты при каждой сборке, добавьте соответствующий шаг в настройках проекта:

  • Откройте ваш проект и нажмите «Настройки».
  • Перейдите в раздел «Шаги сборки».
Изображение 26
  • Нажмите «Добавить шаг сборки». В выпадающем списке выберите подходящий вариант. Например:
  • «Вызвать цели Maven верхнего уровня» — если проект на Java и управляется Maven.
  • «Invoke Gradle script» — если проект использует Gradle.
  • «Выполнить команду shell» — для Linux/Unix, можно прописать pytest, npm test или любую другую команду.
  • «Выполнить команду Windows» — для Windows-среды, аналогично можно прописать команду запуска тестов.
Изображение 27
  • В поле команд укажите конкретную инструкцию для запуска тестов.
Изображение 28
  • Сохраните изменения.

Что такое Jenkins pipeline

Jenkins Pipeline — это способ описать процесс сборки, тестирования и доставки приложения в виде сценария. Вместо того чтобы настраивать шаги вручную в интерфейсе, вы описываете весь конвейер в специальном файле Jenkinsfile. Он хранится вместе с кодом в репозитории, что делает процесс прозрачным и повторяемым.

Pipeline позволяет:

  • управлять процессом с помощью кода, а значит — хранить историю изменений и версионировать настройки;
  • запускать задачи параллельно, что экономит время;
  • легко переносить и воспроизводить процесс на разных серверах или в разных командах.

Фактически Jenkins Pipeline превращает настройку CI/CD в часть проекта. Любой разработчик, открыв репозиторий, может посмотреть, как именно проходит сборка и развертывание, и при необходимости внести изменения.

Разница между Freestyle-проектами и pipeline

Freestyle-проект — это базовый вариант настройки. Все шаги сборки и тестирования задаются через веб-интерфейс. Они подходит для небольших задач или первых экспериментов с Jenkins.

Pipeline-проекты дают больше гибкости. Все этапы работы описываются в специальном файле Jenkinsfile на языке Groovy. Конфигурация хранится в репозитории вместе с кодом, поэтому ее можно версионировать и изменять так же, как исходный код приложения. Pipeline позволяет управлять сложными процессами, запускать задачи параллельно и легко переносить настройки между разными окружениями.

Характеристика Freestyle-проект Pipeline-проект
Способ настройки Через веб-интерфейс В виде кода (Jenkinsfile)
Хранение конфигурации Только в Jenkins В репозитории проекта
Гибкость Подходит для простых задач Поддерживает сложные и многоступенчатые процессы
Параллельные сборки Ограниченные возможности Есть встроенная поддержка
Масштабируемость Сложно поддерживать при росте проекта Легко расширяется вместе с проектом

Синтаксис Jenkinsfile: stages, steps, agents

Jenkinsfile — это сценарий, в котором описывается весь процесс сборки и доставки проекта. Его синтаксис основан на следующих элементах:

  • agent — определяет, где будет выполняться конвейер. Это может быть локальный сервер Jenkins или удаленный узел с нужным окружением. В agent можно указать конкретный образ или метку, чтобы точно задать рабочую среду.
  • stages — основной раздел Jenkinsfile. В нем описываются этапы конвейера: сборка, тестирование, деплой и другие. Каждый stage выполняется последовательно или параллельно, если это указано.
  • steps — набор конкретных действий внутри этапа. Здесь задаются команды, которые Jenkins должен выполнить: запуск скрипта, компиляция, тесты, копирование файлов и так далее.

Пример простого pipeline:

pipeline {

agent any

stages {

stage('Сборка') {

steps {

echo 'Выполняем сборку проекта...'

}

}

stage('Тесты') {

steps {

echo 'Запускаем автоматические тесты...'

}

}

stage('Деплой') {

steps {

echo 'Разворачиваем приложение...'

}

}

}

}

Таким образом, есть три этапа: сборка, тесты и деплой. На каждом из них выполняются свои шаги.

Пример многоступенчатого pipeline:

pipeline {

agent any

stages {

stage('Сборка') {

steps {

echo 'Компиляция исходного кода...'

sh 'mvn clean package'

}

}

stage('Тестирование') {

parallel {

stage('Юнит-тесты') {

steps {

echo 'Запускаем юнит-тесты...'

sh 'mvn test'

}

}

stage('Интеграционные тесты') {

steps {

echo 'Запускаем интеграционные тесты...'

sh 'mvn verify -Pintegration'

}

}

}

}

stage('Анализ кода') {

steps {

echo 'Проверяем качество кода...'

sh 'mvn sonar:sonar'

}

}

stage('Деплой на staging') {

steps {

echo 'Разворачиваем приложение на тестовом сервере...'

sh './deploy.sh staging'

}

}

stage('Деплой на production') {

when {

branch 'main'

}

steps {

echo 'Разворачиваем приложение на боевом сервере...'

sh './deploy.sh production'

}

}

}

}

В этом пайплайне:

  • Сначала происходит сборка.
  • Затем параллельно запускаются юнит- и интеграционные тесты.
  • После тестов выполняется анализ качества кода.
  • Далее приложение разворачивается в тестовой среде.
  • И только при условии, что изменения пришли из ветки main, запускается деплой в production.

Как настроить агент

  • На главной панели Jenkins нажмите на значок шестеренки.
  • Перейдите в раздел Nodes или выберите «Настроить агент». Предпочтительнее второй вариант, так как вы сразу перейдете к окну создания узла.
Изображение 29

Но если выбрали Nodes, то щелкните «Новый узел».

  • Введите имя нового агента и выберите тип «Постоянный агент».
Изображение 30
  • Нажмите «Создать» и укажите основные параметры:
  • «Удаленная корневая директория» для хранения файлов и логов (например: /home/jenkins/agent или C:\Jenkins\Agent).
  • «Метки» — ключевые слова для идентификации агента (например, linux, windows, docker). Потом их можно использовать в Jenkinsfile через agent.
Изображение 31
  • «Использование» — настройка того, как Jenkins будет задействовать узел. Можно оставить «Загружать этот узел настолько, насколько возможно», чтобы агент обрабатывал любые задачи.
  • «Способ запуска» — метод, которым Jenkins будет подключаться к агенту. Чаще всего это SSH, но доступны и другие варианты.
Изображение 32

Плагины в Jenkins

Плагины — основной способ расширить возможности Jenkins и адаптировать его под нужды команды или организации. С их помощью можно интегрировать системы сборки, инструменты анализа кода, облачные сервисы и многое другое. В каталоге доступно более тысячи плагинов, которые поддерживаются сообществом Jenkins.

Все плагины распространяются через Jenkins Update Center — центральный репозиторий, откуда их можно загружать вместе с необходимыми зависимостями.

  • Откройте настройки и перейдите в Plugins.
Изображение 33
  • Откройте вкладку Available plugins и найдите нужный плагин через поиск.
Изображение 34
  • Поставьте галочку рядом с ним.
  • Нажмите «Установить».
Изображение 35

В большинстве случаев плагин будет доступен сразу после установки. Если требуется перезапуск Jenkins, система сообщит об этом.

Безопасность в Jenkins

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

Начиная с Jenkins 2.0, большинство ключевых настроек безопасности включены по умолчанию. Это обеспечивает дополнительную защиту даже без ручной донастройки. При необходимости администратор может изменить параметры в настройках.

Перейдите в Security. Здесь можно настраивать регистрацию аккаунтов, работу API-токенов, проверку ключей для Git и так далее.

Изображение 36

Но основные механизмы безопасности это:

  • Аутентификация. Определяет, каким образом Jenkins проверяет личность пользователя. Система может использовать встроенную базу данных пользователей или интегрироваться с внешними сервисами: LDAP, Active Directory, GitHub и другими провайдерами.
  • Авторизация. Задает правила доступа пользователей или групп к различным разделам Jenkins. Можно ограничить права только просмотром, разрешить запуск сборок или предоставить полный административный доступ.

Чтобы гибко управлять доступом в Jenkins, часто используют плагины. Один из самых популярных — Role-Based Authorization Strategy. Он позволяет создавать роли и назначать им разные уровни прав.

Заключение

Jenkins — это инструмент, который помогает автоматизировать ключевые этапы разработки: от сборки и тестирования до развертывания приложений. Он гибко настраивается под разные задачи, поддерживает интеграции с десятками систем и позволяет выстраивать удобные CI/CD-процессы.

Для начала достаточно освоить базовые возможности: установку, подключение к системе контроля версий, настройку сборок и запуск тестов. Дальше можно переходить к работе с пайплайнами, подключать агентов и внедрять плагины, которые расширяют функциональность.