В этом обучающем материале мы обсудим процесс установки Jenkins, а также рассмотрим пример автоматизации процесса сборки и развертывания его на веб-сервере Jetty.
Введение
В наше время Jenkins считается очень популярной системой, которая позволяет реализовать непрерывную интеграцию и поставку ПО. Если вам нужно облегчить интеграцию разрозненных копий вашего проекта с главной ветвью разработки, то Jenkins тот самый инструмент. Он автоматизирует процесс сборки проекта и тестирования.
Требования
Требования у Jenkins достаточно низкие. Все что вам потребуется, это root пользователь или sudo доступ и ОС Ubuntu версии 20.04.
Создание сервера ProCloud
С любого экрана панели управления вы можете найти кнопку “Создать” в правом верхнем углу. После переходим к созданию сервера, сперва выбираем операционную систему.
Далее вы можете выбрать любую удобную вам конфигурацию.
В конце выбираем зону доступности и внешнюю сеть с выделением публичного IP адреса. Доступ выберем через ssh, но вы всегда можете выбрать альтернативный вариант с генерацией собственного пароля. Даем название серверу и нажимаем “Создать сервер”.
Спустя несколько минут виртуальная машина активируется, после чего вам потребуется скопировать ее адрес-IP:
Для присоединения к серверу вводим следующую команду с индивидуальным адресом:
ssh root@<IP>
В том случае, если создавая машину вы указали ключ-SSH, то для присоединения не потребуется пароль:
ssh -i <private_key> root@<IP>
Установка JDK
Взаимодействие с Maven и Jenkins возможно только благодаря Java. Следует учитывать, что для работы с Maven потребуется исключительно JDK. Давайте его установим:
apt-get update
apt-get install -y openjdk-11-jdk
После проверяем установку:
java -version
Установка Jenkins
Чтобы установить Jenkins необходимо ввести в консоль Ubuntu следующее 4 команды по очереди:
curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee \
/usr/share/keyrings/jenkins-keyring.asc > /dev/null
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
$ apt-get update
$ apt-get install -y jenkins
Проверяем успешность установки и статус:
$ systemctl status jenkins
Установка Git
Он потребуется для клонирования репозитория с кодом по умолчанию на созданный виртуальный сервер:
$ apt-get install -y git
Уточняем версию:
$ git --version
Установка Maven
Нам необходимо установить Maven с помощью команды:
$ apt-get install -y maven
Проверяем установленную версию:
$ mvn --version
В выводе будет параметр “Maven home”, его необходимо запомнить, он потребуется нам в дальнейшем.
Настройка Jenkins
На этом этапе у нас уже имеется необходимый софт, так что мы приступаем к конфигурации Jenkins. Изначально открываем в любом браузере страницу с таким адресом – http://[IP -нашего-сервера]:8080:
На появившейся странице необходимо ввести ваш пароль администратора. Его можно найти в файле: /var/lib/jenkins/secrets/initialAdminPassword. Продолжаем работу с командной строкой Ubuntu:
$ cat /var/lib/jenkins/secrets/initialAdminPassword
Вводим полученный пароль на открытую страницу в браузере. На следующем этапе необходимо поменять режим на “Установка рекомендуемых плагинов”. Они будут устанавливаться с Jenkins. Для этого указываем “Install suggested plugins”.
Далее необходимо создать ваш личный профиль администратора.
Запомните имя юзера и пароль, который указали, он нужен для дальнейших действий.
После этого Jenkins вас попросит перепроверить публичный адрес машины, проверяем и нажимаем “Продолжить”.
Если все выполнено верно, то перед вами откроется следующее окно, которое указывает на успешное завершение настройки:
Настройка Maven в Jenkins
У Jenkins есть нюанс – он не во всех случаях находит установленный Maven. Давайте укажем его самостоятельно:
Проходим в данный раздел:
Убираем галочку возле Install automatically, чтобы у нас появилась возможность редактировать поля:
В них указываем произвольное имя, а путь до папки Maven home нужно взять из пункта “Установка Maven”. Далее фиксируем конфигурацию и выполняем перезапуск командой:
$ systemctl restart jenkins
Создание автоматической сборки
После запуска Jenkins переходим в веб-интерфейс и авторизируемся под нашей учетной записью (мы создали ее во время настройки).
После авторизации у вас откроется окно с меню (слева), нажимаем “Создать Item”. Указываем имя проекта и создаем его со свободной конфигурацией.
В разделе “Управление исходным кодом” указываем Git и прописываем URL нашего репозитория.
Важно! У вас может возникнуть проблема только если репозиторий приватный. Добавьте ваш пароль и логин в разделе Credentials.
Приступим к непосредственной конфигурации сборки. В разделе “Сборка” добавляем шаг сборки как указано ниже:
После выбираем конфигурацию Maven в “Цели” вводим следующую строку:
clean install -P production
Результат компиляции будет располагаться в папке /var/lib/jenkins/workspace/project_name/target/.
В этом случае, после сборки у нас получится war-файл, готовый к деплою.
Давайте создадим второй шаг сборки. Он будет собирать файл-war в папку webapps Jetty, после начинать его перезапуск. В этот раз выбираем “Выполнить команду shell” и прописываем подряд команды в появившемся блоке “Команда”:
yes | cp -rf '/var/lib/jenkins/workspace/project_name/target/api.war' /opt/jetty/webapps/
systemctl restart jetty
Запуск сборки
Чтобы запустить нашу сборку потребуется выбрать в меню “Собрать сейчас”. Далее в “История сборок” у вас высветится индикатор выполнения задачи.
В процессе сборки будут последовательно выполняться такие шаги:
- Извлечение последней версии исходного кода проекта из Git репозитория.
- Инициация сборки загруженного Maven проекта.
- Размещение скомпилированных файлов в директории workspace.
- Перенос war-файла в директорию webapps на веб-сервере Jetty.
- Перезагрузка Jetty.
Автоматизированный процесс сборки и развертывания на веб-сервере готов. Теперь для запуска этого процесса достаточно нажать на кнопку "Собрать сейчас".
Заключение
Jenkins поддерживает множество систем контроля версий, таких как Git и CVS, интегрируется с Ant, Maven и Gradle, может выполнять различные скрипты и автоматически отправлять уведомления. Он поддерживает триггеры сборки по расписанию или событиям. Эта универсальность делает Jenkins ключевым инструментом в процессе разработки.