Jenkins: создание Continuous Integration/Continuous delivery процесса в Jenkins для проекта Java с использованием Docker

Пример создания Continuous Integration/Continuous Delivery процесса для проекта, написанного на Java, c использованием Docker

За основу был взят репозитарий, форкнутый с
https://github.com/nikhilpathania/hello-world-greeting
и его реализация в книге Learning Continuous Integration with Jenkins 2nd Edition by Nikhil Pathania
Здесь доступен оригинальный код автора книги
https://github.com/PacktPublishing/Learning-Continuous-Integration-with-Jenkins-Second-Edition

Все подготовительные работы(установка и интеграция Jenkins,Maven,SonarQube,Nexus) были выполнены в предыдущих статьях:
Установка и настройка Jenkins,Maven,SonarQube,Nexus на Centos 7
Установка и настройка SonarQube на Ubuntu 16
Установка и настройка Nexus на Ubuntu 16
Интеграция Jenkins,Maven,SonarQube,Nexus

Шаги Continuous Integration будут выполнены на master-ноде, а шаги Continuous Delivery – на slave/agent–ноде

Основное отличие от описанного ранее похожего примера
Jenkins: создание Continuous Integration/Continuous delivery процесса в Jenkins для проекта Java
в том, что в этой статье мы будем использовать Jenkins slave/agent-ноду(Docker контейнер) для запуска всех шагов Continuous Delivery.
В предыдущей статье такие шаги выполнялись на standalone Linux-сервере, на котором был развернут Tomcat

Continuous Integration будет состоять из следующих шагов, выполняемых на master-ноде

Jenkins pipeline использует т.н. stash, который позволяет передавать артефакты сборки между нодами Jenkins
Сохранение(stash) артефакта(war-файла) для передачи его другой ноде(Jenkins slave/agent-сервера), на которой Java-приложение будет запускаться с этого war-файла

В качестве slave/agent-сервера будет использоваться Docker-контейнер, который будет запускаться из подготовленного заранее нами Docker-образа, внутри контейнера будет запускаться Tomcat-сервер, для запуска Java-приложения.

Continuous Delivery будет состоять из следующих шагов, выполняемы на Jenkins slave/agent-ноде

 

Настройка Continuous Integration
1. Jenkinsfile для реализации Continuous Integration имеет вид

 

2.Pipeline-сборка в Jenkins

 

На хостовой ноде(в нашем случае Ubuntu16), на которой будет запускаться Docker-контейнер в качестве Jenkins slave/agent-ноды, устаналиваем Docker и разрешаем удаленное подключение к Docker-хосту c Jenkins master-ноды(это достигается с помощью firewall на Docker-хосте)

 

3.Установка Docker на хостовой Docker-ноде с Ubuntu16.04

Verify that the default logging driver is used to json-file.

Ensure that SELinux is not enabled for Docker

 

4.Настройка Docker-сервера на прослушивание удаленных запросов с Jenkins-сервера

На уровне файерволла разрешаем подключение к порту 4243 только с Jenkins-сервера

Проверяем доступность Docker-сервера через API выполняя запрос с Jenkins-сервера
Проверка существующих образов на Docker-сервере

 

5.Установка Jenkins-плагина с именем Docker

 

6.Сборка Docker-образа для запуска Tomcat-сервера для выполнения тестирования производительности
Создадим и запустим контейнер на основе базового образа ubuntu

Внутри контейнера выполним команды необходимые для
создания группы и пользователя jenkins, установим для него пароль(этот логин(jenkins) и пароль(установленный на этом этапе) будут использоваться при создании Credentials в Jenkins
Установки программного обеспечения, которое используется при запуске сборки, например java, а также ssh-сервер и утилиту curl

 

Установка Tomcat-сервера
Загрузка Tomcat-сервера с сайта http://tomcat.apache.org/download-80.cgi

Под пользователем Jenkins распаковываем архив в каталог /home/jenkins/tomcat

Переключаемся на root-пользователя

 

Установка Apache JMeter
Загрука Apache Jmeter с сайта http://jmeter.apache.org/download_jmeter.cgi

Удаляем загруженные архивы пакетов для уменьшения размера Docker-образа

Создание Docker-образа для сохранения сделанных изменений

Выходим из контейнера

Узнаем идентификатор контейнера и создаем Docker-образ с именем performance-test-agent-0.1

 

7.Создание credentials для доступа к Docker в Jenkins

 

8.Настройка Docker-настроек в Jenkins – добавление Docker-хоста и Docker-шаблона

Нажимаем на кнопку Test Connection И проверяем корректный доступ к Docker-серверу с Jenkins благодаря настроенному ранее удаленному доступу.

Добавляем созданный ранее докер-образ

 

9.Создание плана тестирования в Apache Jmeter
Скачиваем Apache Jmeter с http://jmeter.apache.org/download_jmeter.cgi
Извлекаем файлы с архива и переходим в каталог bin
Выполняем файл jmeter.bat или jmeter.sh в зависимости от операционной системы
В результате чего открывается Apache Jmeter Console, в которой создаем наш план тестирования

Создание Thread Group

Создание Sampler

Сохраняем созданный план тестирования

В репозитарии в каталоге src создаем каталог с именем pt и загружаем в него созданный план тестирования (файл hello-world.jmx),

Коммитим изменения и заливаем на GIT-сервер

 

10. Создание Continiouse Delivery pipeline в Jenkinsfile

Изменяем ранее созданный Jenkins-файл добавляя в него после кода

добавляем следующий код

Полный CI/CD pipeline в Jenkinsfile имеет вид

 

11.Запускаем сборку и проверяем Pipeline,результаты тестов, наличие артефактов, результатов нагрузочного тестирования, публикацию отчетов по тестированию

 

Просмор сборки в Blue Ocean

Отчеты тестирования производительности

 

Источник: Книга Learning Continuous Integration with Jenkins 2nd Edition by Nikhil Pathania

Комментирование и размещение ссылок запрещено.

Комментарии закрыты.

Яндекс.Метрика