Как настроить и использовать Jenkins для автоматизации процессов
Ускоряем разработку и повышаем качество кода при помощи инструмента CI/CD. Читайте полное руководство по установке, настройке и оптимизации сервера Jenkins.
1К открытий4К показов
От стабильной работы инструментов автоматизации зависит скорость разработки и прибыль компании. Jenkins — основа CI/CD, ускоряющая выпуск релизов. Перед его интеграцией в проект необходимо знать, как настраивать пайплайны и создавать агентов. В этой статье расскажем о принципах, которые сделают Jenkins надежным инструментом в вашем CI/CD-конвейере.
Что такое Jenkins
Jenkins — это фреймворк для непрерывной разработки. Он автоматизирует рутинные задачи и следит за качеством кода. Jenkins можно представить как робота-ассистента, который 24/7 проверяет вашу работу, собирает приложения, запускает тесты и сообщает результаты команде.
В архитектуре инструмента есть центральный компонент — контроллер (Master Mode). Он руководит всеми процессами. Контроллер распределяет выполнение задач согласно расписанию между агентами (слейвами). Результаты сохраняются в build-логе контроллера.
Обычно выделяют отдельный слейв-сервер под каждую категорию задач:
- Для разработки.
- Для тестирования.
- Для пользователей.
Таски можно повесить на одного агента, но помните про риск перегрузки. В случае сбоя единственного сервера проблема одновременно затронет всех участников проекта. Поэтому даже на ранних стадиях советуем распределять задачи между нескольким слейвами.
Сценарии применения Jenkins
- Автоматизация сборки. Когда разработчики вносят изменения в код на GitHub, Jenkins автоматически запускает сборку проекта.
- Выполнение тестов. Можно настроить Jenkins так, чтобы после каждой успешной сборки сразу же начиналось тестирование.
- Непрерывная доставка. Пайплайн в Jenkins можно настроить на автоматическое развертывание приложения на тестовом сервере после успешного прохождения всех тестов.
- Мониторинг. При помощи плагина Dashboard можно отслеживать статус сборок и тестов. Jenkins отправит оповещения по электронной почте или в Slack.
- Управление артефактами. Jenkins автоматически создаст и сохранит артефакт в формате JAR или Docker-образов после успешной сборки.
Преимущества и недостатки Jenkins
Плюсы:
- Работает на Linux, macOS и Windows.
- Интегрируется с облачными платформами.
- Поддерживает параллельное выполнение задач.
- Надежен в решении DevOps-задач.
- Бесплатный опенсорсный проект.
- Тонкая настройка процессов.
- 1800+ плагинов в каталоге.
- Активное сообщество.
- Наличие REST API.
Минусы:
- Не подходит для маленьких проектов.
- Нет аналитики по CI/CD-цепочкам.
- Зависимость от плагинов.
Установка Jenkins
Фреймворк написан на Java, поэтому для его работы необходимо установить JDK 21 — Java Development Kit. Также потребуется пользователь с root-правами или доступ через sudo.
Jenkins поддерживает только две версии JDK — 21 и 17.
Jenkins на Ubuntu
В первую очередь проверим наличие пакета Java в системе.
Если терминал не прислал в ответ версию Java, нужно установить пакет JDK. Заходим на официальный сайт, копируем ссылку на скачивание ARM64 Compressed Archive и возвращаемся в терминал.
С помощью wget и полученной ссылки на файл загружаем JDK:
Создадим каталог для распаковки архива:
Распакуем архив в созданную директорию:
Для установки JDK воспользуемся PPA. Добавим его в список репозиториев:
Обновим доступные пакеты:
Теперь установим JDK:
Приступаем к установке Jenkins. Первым делом получаем GPG-ключ шифрования. Система будет использовать его для верификации пакетов из репозитория Jenkins.
Применяем curl для загрузки ключа и сразу же интегрируем его в систему командой sudo tee:
Следующим шагом добавляем в Ubuntu официальный репозиторий Jenkins, согласно документации:
Обновляем список пакетов:
Устанавливаем Jenkins:
Проверяем результат установки, обратившись к сервису Jenkins:
Если процесс не обнаружен, убедитесь, что порт 8080 не занят другими приложениями. Также проверьте наличие достаточного объема оперативной памяти. Для корректной работы Jenkins необходимо как минимум 256 МБ ОЗУ.
Jenkins на Windows
Перед тем, как настроить Jenkins, подготовим окружение: скачиваем последнюю версию JDK 21 с официального сайта и устанавливаем Development Kit в систему.
Далее скачиваем Jenkins и запускаем установщик. В поля Account и Password нужно ввести имя учетной записи компьютера и пароль. Если возникла ошибка входа, обратитесь к этому руководству или переключитесь на первый параметр.
На следующем этапе выбираем стандартный порт 8080 и запускаем тест.
Теперь указываем путь до JDK. Если предварительно не устанавливали комплект разработчика, придется прервать установку.
Соглашаемся на установку компонентов и закрываем установщик. Если процесс Jenkins появился в диспетчере задач, значит, все прошло успешно и можно приступать к настройкам.
Конфигурация Jenkins
Откройте браузер и введите адрес:
- Ubuntu: http://ip_сервера:8080.
- Windows: http://localhost:8080.
На странице разблокировки Jenkins нужно ввести пароль администратора. Путь к файлу с паролем может отличаться.
Выберите установку стандартного набора плагинов — левая кнопка Install suggested plugins. Если вы уже знаете, какие плагины понадобятся для интеграции на проекте, выбирайте Select plugins to install.
Дождитесь завершения загрузки дополнений.
Создайте учетную запись администратора.
После успешной настройки вы увидите сообщение о готовности Jenkins к использованию.
Jenkins со стандартными плагинами установлен и готов к интеграции в проект. Теперь создадим ноду и назначим ей выполнение задачи.
Настройка рабочих агентов (nodes)
Создадим первого слейва через SSH.
Для этого нужно установить два дополнительных плагина — SSH Agent и SSH Slaves. С их помощью Jenkins сможет добавлять агентов по SSH и запоминать учетные данные для подключения к нодам.
Переходим в раздел «Manage Jenkins → Manage Nodes → New Node». Новой ноде зададим имя, краткое описание, количество потоков (executors), рабочую директорию, метки (labels).
В Host вводим ip-адрес сервера, а для выбора способа подключения выбираем «Keys». В открывшемся окне вводим RSA-ключ и сохраняем данные входа.
Чтобы задача запускалась на созданной ноде и не нагружала мастер-сервер, нужно указать это в настройках пайплайна.
В поле Label нужно ввести метку, которую вы указывали при создании ноды. Теперь после запуска пайплайна по кнопке «Build Now» нагрузка будет распределяться между потоками указанного агента.
Создание и настройка пайплайнов в Jenkins
Пайплайн — это набор плагинов для определения модели сборки, тестирования и развертывания кода. С помощью пайплайнов можно увидеть жизненный цикл этих процессов.
Типы пайплайнов:
- Скриптовые — гибкий синтаксис. Исполняемый код загружается из xml-файла.
- Декларативные — более структурированный синтаксис. Исполняемый код извлекается из репозитория.
Пайплайны определяются в файле Jenkinsfile, он хранится в репозитории с кодом проекта.
При описании пайплайнов верхнего уровня рекомендуется использовать декларативный тип, так как в нем можно определить действия после каждого стейджа.
Для создания первого пайплайна воспользуемся официальными мануалами Jenkins с описанием синтаксиса и степов на языке Groove.
Создание простого пайплайна
Для создания задачи войдите в аккаунт Jenkins. На главной странице нажмите «New Item», введите имя для пайплайна и выберите тип «Pipeline».
В окне конфигурации перейдите к секции «Pipeline». В поле «Script» введите базовый скрипт пайплайна из официального руководства. Сохраните конфигурацию.
Вернитесь на страницу проекта и нажмите «Build Now», чтобы запустить пайплайн. После запуска вы увидите новую сборку в истории. Нажмите на номер сборки и выберите «Console Output», чтобы просмотреть результаты выполнения каждого этапа.
Работа с многоэтапными пайплайнами
Пайплайны поддерживают параллельную обработку этапов:
- используя parallel, можно запускать несколько этапов одновременно;
- при помощью when в пайплайне реализуется ветвление;
- для обработки ошибок используются блоки post;
- чтобы переиспользовать блоки кода, можно определять переменные окружения в environment;
- с помощью Shared Libraries общую логику можно вынести в отдельные библиотеки и использовать одно решение на разных проектах.
В примере многоэтапного пайплайна определены этапы подготовки, параллельной сборки и тестирования, а также условного развертывания:
Завершается пайплайн блоком post-обработки, он выполняется независимо от результата основных этапов.
Интеграция Jenkins с системами контроля версий
Необходимо установить плагин «Git». Далее в настройках проекта появится поле, где можно указать URL репозитория. Также нужно выбрать ветку, которую Jenkins будет отслеживать для запуска сборок.
В Jenkins можно отслеживать нескольких веток одновременно, используя шаблоны. Например, всех коммитов, начинающихся с «feature». Также Jenkins позволяет настроить триггеры, которые будут запускать сборку при создании нового тега в репозитории.
Отслеживать изменения между сборками поможет плагин «Git Changes». Он показывает все изменения, которые были внесены в код с момента последней успешной сборки.
Автоматизация тестирования и развертывания
Начать можно с модульных тестов. Для проекта на Maven Jenkinsfile мог бы содержать следующий этап:
Затем можно добавить интеграционные тесты, которые проверяют взаимодействие между различными частями системы. Для нагрузочных или UI-тестов можно интегрировать JMeter и Selenium.
После успешного прохождения всех тестов Jenkins может автоматически запустить процесс развертывания приложения. Например, для веб-проекта можно настроить автоматическую публикацию на сервер Apache или Nginx.
Оптимизация и управление Jenkins
В настройках каждого пайплайна есть опция «Discard old builds». Включите ее и укажите, сколько недель хранить данные — достаточно 2–3 недель. Если нужно хранить дольше, лучше сохранять логи отдельно, как файлы на другом диске.
Выберите размер памяти для Jenkins. В файле настроек Jenkins (обычно это jenkins.xml или jenkins.service) добавьте параметр -Xmx2g — это выделит 2 ГБ памяти, можно больше.
Включите логи для отслеживания памяти. Так вы сможете обнаружить причину проблемы, если Jenkins начнет тормозить. В настройках сервера найдите опцию «Enable GC logging» и включите её.
При написании скриптов для пайплайнов следуйте рекомендациям Jenkins. Они есть на официальном сайте в разделе «Pipeline Code → Best practices».
Где возможно, переписывайте Groovy скрипты на Bash, чтобы код сразу выполнялся на нодах, не нагружая мастер-сервер.
Используйте плагин Role-based Authorization Strategy для тонкой настройки прав доступа. Ограничьте доступ к мастер-ноде Jenkins, разрешая выполнение задач только на агентах.
Практические кейсы и примеры использования Jenkins
Сила Jenkins в его способности интегрироваться с другими инструментами DevOps. Например, с Docker для сборки и тестирования в изолированном окружении. А связка Jenkins и Kubernetes открывает возможности для масштабирования и управления ресурсами.
Jenkins можно настроить на регулярную проверку обновлений используемых библиотек. При обнаружении новых версий, система автоматически проверит их совместимость с текущим кодом, и если все в порядке, создаст pull request с предложением обновления.
Скрипты и примеры
Рассмотрим пример простого Jenkinsfile для Java-проекта. Этот файл определяет pipeline, который включает этапы сборки, тестирования и развертывания приложения.
На этапе сборки выполняется команда ‘mvn clean package’, затем запускаются тесты с помощью ‘mvn test’. На этапе развертывания создается Docker-образ приложения и отправляется в репозиторий.
Преимущество работы с Jenkins в автоматизации рутинных задач скриптами. Например, можно создать bash-скрипт для автоматического обновления версии в файле package.json и создания соответствующего git-тега:
Рассказывайте в комментариях, в каких проектах вы использовали Jenkins.
1К открытий4К показов