Игра Яндекс Практикума
Игра Яндекс Практикума
Игра Яндекс Практикума

Как настроить и использовать Jenkins для автоматизации процессов

Отредактировано

Ускоряем разработку и повышаем качество кода при помощи инструмента CI/CD. Читайте полное руководство по установке, настройке и оптимизации сервера Jenkins.

977 открытий4К показов
Как настроить и использовать Jenkins для автоматизации процессов

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

Что такое Jenkins

Jenkins — это фреймворк для непрерывной разработки. Он автоматизирует рутинные задачи и следит за качеством кода. Jenkins можно представить как робота-ассистента, который 24/7 проверяет вашу работу, собирает приложения, запускает тесты и сообщает результаты команде.

В архитектуре инструмента есть центральный компонент — контроллер (Master Mode). Он руководит всеми процессами. Контроллер распределяет выполнение задач согласно расписанию между агентами (слейвами). Результаты сохраняются в build-логе контроллера.

Как настроить и использовать Jenkins для автоматизации процессов 1

Обычно выделяют отдельный слейв-сервер под каждую категорию задач:

  • Для разработки.
  • Для тестирования.
  • Для пользователей.

Таски можно повесить на одного агента, но помните про риск перегрузки. В случае сбоя единственного сервера проблема одновременно затронет всех участников проекта. Поэтому даже на ранних стадиях советуем распределять задачи между нескольким слейвами.

Сценарии применения 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 -version
		

Если терминал не прислал в ответ версию Java, нужно установить пакет JDK. Заходим на официальный сайт, копируем ссылку на скачивание ARM64 Compressed Archive и возвращаемся в терминал.

Как настроить и использовать Jenkins для автоматизации процессов 2

С помощью wget и полученной ссылки на файл загружаем JDK:

			wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
		

Создадим каталог для распаковки архива:

			sudo mkdir -p /usr/lib/название_папки
		

Распакуем архив в созданную директорию:

			tar -zxvf jdk-21_linux-x64_bin.tar.gz -C /usr/lib/название_папки
		

Для установки JDK воспользуемся PPA. Добавим его в список репозиториев:

			add-apt-repository ppa:linuxuprising/java
		

Обновим доступные пакеты:

			sudo apt update
		

Теперь установим JDK:

			sudo apt-get install -y openjdk-21-jdk
		

Приступаем к установке Jenkins. Первым делом получаем GPG-ключ шифрования. Система будет использовать его для верификации пакетов из репозитория Jenkins.

Применяем curl для загрузки ключа и сразу же интегрируем его в систему командой sudo tee:

			curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee
    /usr/share/keyrings/jenkins-keyring.asc > /dev/null
		

Следующим шагом добавляем в Ubuntu официальный репозиторий Jenkins, согласно документации:

			echo"deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \
    https://pkg.jenkins.io/debian-stable binary/ | sudotee \
    /etc/apt/sources.list.d/jenkins.list > /dev/null
		

Обновляем список пакетов:

			sudo apt-get update
		

Устанавливаем Jenkins:

			sudo apt-get install -y jenkins
		

Проверяем результат установки, обратившись к сервису Jenkins:

			systemctl status jenkins
		

Если процесс не обнаружен, убедитесь, что порт 8080 не занят другими приложениями. Также проверьте наличие достаточного объема оперативной памяти. Для корректной работы Jenkins необходимо как минимум 256 МБ ОЗУ.

Jenkins на Windows

Перед тем, как настроить Jenkins, подготовим окружение: скачиваем последнюю версию JDK 21 с официального сайта и устанавливаем Development Kit в систему.

Как настроить и использовать Jenkins для автоматизации процессов 3

Далее скачиваем Jenkins и запускаем установщик. В поля Account и Password нужно ввести имя учетной записи компьютера и пароль. Если возникла ошибка входа, обратитесь к этому руководству или переключитесь на первый параметр.

Как настроить и использовать Jenkins для автоматизации процессов 4

На следующем этапе выбираем стандартный порт 8080 и запускаем тест.

Как настроить и использовать Jenkins для автоматизации процессов 5

Теперь указываем путь до JDK. Если предварительно не устанавливали комплект разработчика, придется прервать установку.

Как настроить и использовать Jenkins для автоматизации процессов 6

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

Конфигурация Jenkins

Откройте браузер и введите адрес:

  • Ubuntu: http://ip_сервера:8080.
  • Windows: http://localhost:8080.

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

Как настроить и использовать Jenkins для автоматизации процессов 7

Выберите установку стандартного набора плагинов — левая кнопка Install suggested plugins. Если вы уже знаете, какие плагины понадобятся для интеграции на проекте, выбирайте Select plugins to install.

Как настроить и использовать Jenkins для автоматизации процессов 8

Дождитесь завершения загрузки дополнений.

Как настроить и использовать Jenkins для автоматизации процессов 9

Создайте учетную запись администратора.

Как настроить и использовать Jenkins для автоматизации процессов 10

После успешной настройки вы увидите сообщение о готовности Jenkins к использованию.

Как настроить и использовать Jenkins для автоматизации процессов 11

Jenkins со стандартными плагинами установлен и готов к интеграции в проект. Теперь создадим ноду и назначим ей выполнение задачи.

Настройка рабочих агентов (nodes)

Создадим первого слейва через SSH.

Для этого нужно установить два дополнительных плагина — SSH Agent и SSH Slaves. С их помощью Jenkins сможет добавлять агентов по SSH и запоминать учетные данные для подключения к нодам.

Как настроить и использовать Jenkins для автоматизации процессов 12

Переходим в раздел «Manage Jenkins → Manage Nodes → New Node». Новой ноде зададим имя, краткое описание, количество потоков (executors), рабочую директорию, метки (labels).

Как настроить и использовать Jenkins для автоматизации процессов 13
  

В Host вводим ip-адрес сервера, а для выбора способа подключения выбираем «Keys». В открывшемся окне вводим RSA-ключ и сохраняем данные входа.

Как настроить и использовать Jenkins для автоматизации процессов 14
  

Чтобы задача запускалась на созданной ноде и не нагружала мастер-сервер, нужно указать это в настройках пайплайна.

Как настроить и использовать Jenkins для автоматизации процессов 15

В поле Label нужно ввести метку, которую вы указывали при создании ноды. Теперь после запуска пайплайна по кнопке «Build Now» нагрузка будет распределяться между потоками указанного агента.

Создание и настройка пайплайнов в Jenkins

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

Как настроить и использовать Jenkins для автоматизации процессов 16

Типы пайплайнов:

  • Скриптовые — гибкий синтаксис. Исполняемый код загружается из xml-файла.
  • Декларативные — более структурированный синтаксис. Исполняемый код извлекается из репозитория.

Пайплайны определяются в файле Jenkinsfile, он хранится в репозитории с кодом проекта.

При описании пайплайнов верхнего уровня рекомендуется использовать декларативный тип, так как в нем можно определить действия после каждого стейджа.

Для создания первого пайплайна воспользуемся официальными мануалами Jenkins с описанием синтаксиса и степов на языке Groove.

Создание простого пайплайна

			pipeline {
    agent any
    
    stages {
        stage('Сборка') {
            steps {
                echo 'Сборка проекта...'
            }
        }
        stage('Тест') {
            steps {
                echo 'Тестирование...'
            }
        }
        stage('Развертывание') {
            steps {
                echo 'Развертывание проекта...'
            }
        }
    }
}
		

Для создания задачи войдите в аккаунт Jenkins. На главной странице нажмите «New Item», введите имя для пайплайна и выберите тип «Pipeline».

В окне конфигурации перейдите к секции «Pipeline». В поле «Script» введите базовый скрипт пайплайна из официального руководства. Сохраните конфигурацию.

Как настроить и использовать Jenkins для автоматизации процессов 17

Вернитесь на страницу проекта и нажмите «Build Now», чтобы запустить пайплайн. После запуска вы увидите новую сборку в истории. Нажмите на номер сборки и выберите «Console Output», чтобы просмотреть результаты выполнения каждого этапа.

Работа с многоэтапными пайплайнами

Пайплайны поддерживают параллельную обработку этапов:

  • используя parallel, можно запускать несколько этапов одновременно;
  • при помощью when в пайплайне реализуется ветвление;
  • для обработки ошибок используются блоки post;
  • чтобы переиспользовать блоки кода, можно определять переменные окружения в environment;
  • с помощью Shared Libraries общую логику можно вынести в отдельные библиотеки и использовать одно решение на разных проектах.

В примере многоэтапного пайплайна определены этапы подготовки, параллельной сборки и тестирования, а также условного развертывания:

			pipeline {
    agent any
    stages {
        stage('Подготовка') {
            steps {
                echo 'Подготовка окружения'
            }
        }
        stage('Сборка и тесты') {
            parallel {
                stage('Сборка') {
                    steps {
                        echo 'Сборка проекта'
                    }
                }
                stage('Модульные тесты') {
                    steps {
                        echo 'Запуск модульных тестов'
                    }
                }
            }
        }
        stage('Развертывание') {
            when {
                expression { currentBuild.resultIsBetterOrEqualTo('SUCCESS') }
            }
            steps {
                echo 'Развертывание приложения'
            }
        }
    }
    post {
        always {
            echo 'Очистка рабочего пространства'
        }
    }
}
		

Завершается пайплайн блоком post-обработки, он выполняется независимо от результата основных этапов.

Интеграция Jenkins с системами контроля версий

Необходимо установить плагин «Git». Далее в настройках проекта появится поле, где можно указать URL репозитория. Также нужно выбрать ветку, которую Jenkins будет отслеживать для запуска сборок.

Как настроить и использовать Jenkins для автоматизации процессов 18

В Jenkins можно отслеживать нескольких веток одновременно, используя шаблоны. Например, всех коммитов, начинающихся с «feature». Также Jenkins позволяет настроить триггеры, которые будут запускать сборку при создании нового тега в репозитории.

Отслеживать изменения между сборками поможет плагин «Git Changes». Он показывает все изменения, которые были внесены в код с момента последней успешной сборки.

Автоматизация тестирования и развертывания

Начать можно с модульных тестов. Для проекта на Maven Jenkinsfile мог бы содержать следующий этап:

			pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
    }
}
		

Затем можно добавить интеграционные тесты, которые проверяют взаимодействие между различными частями системы. Для нагрузочных или 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-образ приложения и отправляется в репозиторий.

			pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
        stage('Deploy') {
            steps {
                sh 'docker build -t myapp .'
                sh 'docker push myapp:latest'
            }
        }
    }
}
		

Преимущество работы с Jenkins в автоматизации рутинных задач скриптами. Например, можно создать bash-скрипт для автоматического обновления версии в файле package.json и создания соответствующего git-тега:

			#!/bin/bash

# Проверяем, есть ли файл package.json
if [ ! -f package.json ]; then
  echo "Ошибка: Файл package.json не найден!"
  exit 1
fi

# Получаем текущую версию из package.json
current_version=$(jq -r '.version' package.json)

# Разбиваем версию на части
IFS='.' read -r -a version_parts <<< "$current_version"

# Увеличиваем патч-версию
((version_parts[2]++))

# Собираем новую версию
new_version="${version_parts[0]}.${version_parts[1]}.${version_parts[2]}"

# Обновляем версию в package.json
jq --arg new_version "$new_version" '.version = $new_version' package.json > tmp.json && mv tmp.json package.json

# Делаем коммит изменений
git add package.json
git commit -m "Bump version to $new_version"

# Создаем тег новой версии
git tag -a v$new_version -m "Version $new_version"

# Отправляем изменения на удаленный репозиторий
git push origin main
git push origin v$new_version
		

Рассказывайте в комментариях, в каких проектах вы использовали Jenkins.

Следите за новыми постами
Следите за новыми постами по любимым темам
977 открытий4К показов