Когда проект обрастает десятками задач, тестов и релизов, становится очень сложно поддерживать его вручную. Нужно что-то, что возьмет рутину на себя: проверит код, соберет приложение, прогонит тесты и развернет результат на сервере. Именно для этого и используют 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.
- Запустите установочный файл и следуйте инструкциям установщика.
- Скопируйте или запомните путь установки, по умолчанию это:
C:\Program Files\Java\jdk-21\
Этот путь понадобится при настройке Jenkins.
- Дождитесь окончания установки и закройте окно установщика.
- Перейдите на Jenkins и скачайте установочный файл для Windows.
- Запустите установочный файл и кликните Next.
- Укажите папку, в которую хотите установить Jenkins:
- В окне выбора способа запуска измените параметр Run service as local or domain user на Run service as LocalSystem.
- Убедитесь, что порт для работы Jenkins установлен по умолчанию — 8080. Протестируйте его с помощью кнопки Test Port и нажмите Next.
- На следующем шаге укажите путь к установленной ранее JDK, например:
C:\Program Files\Java\jdk-21\
- Согласитесь с установкой предлагаемых компонентов.
- Щелкните Install и дождитесь окончания установки.
- Закройте окно установщика, нажав Finish.
Как установить 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://
А для Windows:
http://localhost:8080
Если служба Jenkins запущена корректно, вы попадете на страницу приветствия и сможете продолжить настройку через веб-интерфейс.
Первичная настройка Jenkins
Дальше мы сосредоточимся на настройке Jenkins под Windows — в целом процесс на Linux будет выглядеть аналогично.
- Найдите файл с паролем администратора (его путь указан в установщике) и скопируйте содержимое.
- Вставьте его в поле Administrator password и нажмите Continue.
- В окне установки плагинов выберите Install suggested plugins, чтобы загрузить стандартный набор.
- Дождитесь окончания установки. Если какой-то плагин не загрузился, нажмите Retry, чтобы повторить попытку.
- Создайте учетную запись администратора: введите имя пользователя, пароль и электронную почту.
- Сохраните данные, нажав Save and Continue.
- В следующем окне можно настроить Jenkins URL — адрес, по которому будет доступен веб-интерфейс. Значение можно оставить без изменений, если вы работаете локально.
- Нажмите Start using Jenkins и перейдите в интерфейс программы.
Как использовать Jenkins: базовая инструкция
Jenkins готов к работе сразу после установки и первичной настройки. Следующий шаг — научиться создавать проекты и запускать сборки. Начнем с самого простого и разберем, как создать новый проект в Jenkins.
Как создать новый проект в Jenkins
- Перейдите в веб-интерфейс Jenkins и нажмите кнопку New Item в меню слева.
- Введите название проекта в поле Enter an item name. Оно должно быть уникальным.
- Выберите тип проекта:
- «Создать задачу со свободной конфигурацией» (Freestyle project) — универсальный вариант, который подходит для большинства случаев.
- Pipeline — для описания процесса в виде скрипта. Весь конвейер (сборка, тесты, деплой) задается в виде сценария на языке Groovy.
- «Мультиконфигурационный проект» — используется, когда нужно протестировать разные конфигурации или платформы.
- Folder — для группировки задач в папки.
- Multibranch Pipeline — автоматически создает пайплайны для каждой ветки репозитория.
- Organization Folder — для организации множества проектов в пределах одной компании или репозитория.
- Нажмите кнопку OK, чтобы перейти к настройке.
- В открывшемся окне настройте проект. К примеру:
- В поле «Описание» добавьте краткое пояснение, чтобы другим участникам команды было ясно, для чего используется задача.
- При необходимости отметьте GitHub project и укажите ссылку на репозиторий, если проект хранится на GitHub.
- В разделе «Управление исходным кодом» настройте подключение к системе контроля версий (например, Git), указав адрес репозитория и при необходимости — учетные данные.
- В Triggers можно задать условия запуска: например, запускать сборку при каждом изменении в репозитории или по расписанию.
- В разделе «Шаги сборки» укажите, какие действия Jenkins должен выполнять: компиляция, запуск скриптов, тестов и так далее.
- В блоке «Послеcборочные операции» настройте дополнительные действия: отправку уведомлений, публикацию артефактов или деплой.
- Когда закончите, нажмите Save.
Как подключить GitHub/GitLab-репозиторий
Jenkins может напрямую работать с системами контроля версий. Это позволяет автоматически забирать свежий код из репозитория и запускать сборки при каждом изменении.
Настроить подключение можно и при создании проекта. Но если вы этого не сделали, то:
- Откройте проект в Jenkins и перейдите в его настройки.
- В блоке «Управление исходным кодом» выберите пункт Git.
- В поле Repository URL укажите ссылку на ваш репозиторий.
Если репозиторий приватный, добавьте учетные данные.
- Укажите ветку, с которой будет работать Jenkins. Чаще всего это main или master.
- Сохраните изменения.
Как настроить автоматическую сборку
Чтобы Jenkins сам запускал задачу при изменении кода или по расписанию, нужно настроить триггеры:
- Откройте нужный проект и нажмите «Настройки».
- Перейдите в раздел Triggers.
- Выберите один или несколько вариантов:
- GitHub hook trigger for GITScm polling — запуск при пуше в GitHub. Потребуется настроить Webhook на стороне репозитория.
- «Запускать периодически» — выполнение задачи по расписанию. В поле укажите cron-выражение. Например, H 3 * * * означает запуск каждый день в 3:00.
- «Опрос SCM об изменениях» — Jenkins будет проверять репозиторий через определенные интервалы и запускать сборку, если появились новые коммиты.
- «Запустить по окончанию сборки других проектов» — полезно, если задачи связаны между собой.
- Trigger builds remotely — запуск из внешних скриптов по URL с токеном.
- Сохраните настройки.
Как настроить автоматический запуск тестов
Чтобы Jenkins запускал тесты при каждой сборке, добавьте соответствующий шаг в настройках проекта:
- Откройте ваш проект и нажмите «Настройки».
- Перейдите в раздел «Шаги сборки».
- Нажмите «Добавить шаг сборки». В выпадающем списке выберите подходящий вариант. Например:
- «Вызвать цели Maven верхнего уровня» — если проект на Java и управляется Maven.
- «Invoke Gradle script» — если проект использует Gradle.
- «Выполнить команду shell» — для Linux/Unix, можно прописать pytest, npm test или любую другую команду.
- «Выполнить команду Windows» — для Windows-среды, аналогично можно прописать команду запуска тестов.
- В поле команд укажите конкретную инструкцию для запуска тестов.
- Сохраните изменения.
Что такое 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 или выберите «Настроить агент». Предпочтительнее второй вариант, так как вы сразу перейдете к окну создания узла.
Но если выбрали Nodes, то щелкните «Новый узел».
- Введите имя нового агента и выберите тип «Постоянный агент».
- Нажмите «Создать» и укажите основные параметры:
- «Удаленная корневая директория» для хранения файлов и логов (например: /home/jenkins/agent или C:\Jenkins\Agent).
- «Метки» — ключевые слова для идентификации агента (например, linux, windows, docker). Потом их можно использовать в Jenkinsfile через agent.
- «Использование» — настройка того, как Jenkins будет задействовать узел. Можно оставить «Загружать этот узел настолько, насколько возможно», чтобы агент обрабатывал любые задачи.
- «Способ запуска» — метод, которым Jenkins будет подключаться к агенту. Чаще всего это SSH, но доступны и другие варианты.
Плагины в Jenkins
Плагины — основной способ расширить возможности Jenkins и адаптировать его под нужды команды или организации. С их помощью можно интегрировать системы сборки, инструменты анализа кода, облачные сервисы и многое другое. В каталоге доступно более тысячи плагинов, которые поддерживаются сообществом Jenkins.
Все плагины распространяются через Jenkins Update Center — центральный репозиторий, откуда их можно загружать вместе с необходимыми зависимостями.
- Откройте настройки и перейдите в Plugins.
- Откройте вкладку Available plugins и найдите нужный плагин через поиск.
- Поставьте галочку рядом с ним.
- Нажмите «Установить».
В большинстве случаев плагин будет доступен сразу после установки. Если требуется перезапуск Jenkins, система сообщит об этом.
Безопасность в Jenkins
Jenkins используется как в корпоративных сетях, так и на серверах с публичным доступом. Поэтому в системе предусмотрено множество опций для защиты от потенциальных угроз. Администраторы могут включать, отключать или настраивать функции безопасности в зависимости от требований инфраструктуры.
Начиная с Jenkins 2.0, большинство ключевых настроек безопасности включены по умолчанию. Это обеспечивает дополнительную защиту даже без ручной донастройки. При необходимости администратор может изменить параметры в настройках.
Перейдите в Security. Здесь можно настраивать регистрацию аккаунтов, работу API-токенов, проверку ключей для Git и так далее.
Но основные механизмы безопасности это:
- Аутентификация. Определяет, каким образом Jenkins проверяет личность пользователя. Система может использовать встроенную базу данных пользователей или интегрироваться с внешними сервисами: LDAP, Active Directory, GitHub и другими провайдерами.
- Авторизация. Задает правила доступа пользователей или групп к различным разделам Jenkins. Можно ограничить права только просмотром, разрешить запуск сборок или предоставить полный административный доступ.
Чтобы гибко управлять доступом в Jenkins, часто используют плагины. Один из самых популярных — Role-Based Authorization Strategy. Он позволяет создавать роли и назначать им разные уровни прав.
Заключение
Jenkins — это инструмент, который помогает автоматизировать ключевые этапы разработки: от сборки и тестирования до развертывания приложений. Он гибко настраивается под разные задачи, поддерживает интеграции с десятками систем и позволяет выстраивать удобные CI/CD-процессы.
Для начала достаточно освоить базовые возможности: установку, подключение к системе контроля версий, настройку сборок и запуск тестов. Дальше можно переходить к работе с пайплайнами, подключать агентов и внедрять плагины, которые расширяют функциональность.