Развёртывание API Spring Boot 3.0 с использованием Jenkins Pipeline и Docker

Развёртывание API Spring Boot 3.0 с использованием Jenkins Pipeline и Docker

В этой статье мы объясним, как развернуть Spring boot-приложение с помощью Jenkins Pipeline и Docker шаг за шагом.

Развёртывание API Spring Boot 3.0 с использованием Jenkins Pipeline и Docker

Необходимая утилита

Вот список всех необходимых инструментов:

  • Spring Boot 3
  • Maven 3.6.+
  • Java 17
  • A GitHub repository
  • Git
  • Установленный Jenkins
  • Установленный Docker
  • Установленный Docker compose
  • PostgreSQL
  • Postman / insomnia или любой другой инструмент тестирования API

Настройка Spring Boot

Предположим, у нас уже есть простой Spring Boot Rest API, предоставляющий некоторую информацию о книгах. Приложение подключено к базе данных PostgreSQL.

Структура проекта

Вот структура нашего проекта:

Развёртывание API Spring Boot 3.0 с использованием Jenkins Pipeline и Docker

Вот такой результат будет у нас при попытке получить список книг:

Развёртывание API Spring Boot 3.0 с использованием Jenkins Pipeline и Docker

Контейнеризация приложения

1. Dockerfile

Чтобы создать образ контейнера с помощью Docker, нам нужно будет использовать файл Dockerfile. Dockerfile - это текстовый файл без расширения, содержащий скрипт с инструкциями. Docker использует этот скрипт для создания образа контейнера. Файл должен быть создан в корневом каталоге проекта.

# creates a layer from the openjdk:17-alpine Docker image. FROM openjdk:17-alpine MAINTAINER boottechnologies.ci@gmail.com # cd /app WORKDIR /app # Refer to Maven build -> finalName ARG JAR_FILE=target/spring-boot-docker-*.jar # cp target/spring-boot-docker-0.0.1-SNAPSHOT.jar /app/spring-boot-docker.jar COPY ${JAR_FILE} spring-boot-docker.jar # java -jar /app/spring-boot-docker.jar CMD ["java", "-jar", "-Xmx1024M", "/app/spring-boot-docker.jar"] # Make port 8090 available to the world outside this container EXPOSE 8090

2. Docker compose

Docker Compose - это инструмент, разработанный для того, чтобы помочь определять многоконтейнерные приложения и совместно использовать их. С помощью Compose мы можем создать файл YAML для определения сервисов и с помощью одной команды развернуть всё, что в нём находится.

В этом случае нам нужно создать 2 контейнера (базу данных и API-приложение). В корневой папке проекта создайте файл с именем docker-compose.yml

version: '3.8' services: api: build: . ports: - '8090:8090' container_name: bookapi environment: - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/bookdb - SPRING_DATASOURCE_USERNAME=book-user - SPRING_DATASOURCE_PASSWORD=k9ZqLC links: - 'db:database' db: image: postgres:15.2 restart: always environment: POSTGRES_USER: book-user POSTGRES_PASSWORD: k9ZqLC POSTGRES_DB: bookdb volumes: - db-data:/var/lib/postgresql/data ports: - 6432:5432 volumes: db-data: driver: local

3. Использование Jenkinsfile

Jenkinsfile - это текстовый файл, который содержит определение Jenkins Pipeline и проверяется в системе управления версиями. Давайте создадим новый Jenkinsfile в корневом каталоге проекта, который реализует базовый трёхступенчатый конвейер непрерывной доставки.

pipeline { agent any environment { MAVEN_ARGS=" -e clean install" registry = "" dockerContainerName = 'bookapi' dockerImageName = 'bookapi-api' } stages { stage('Build') { steps { withMaven(maven: 'MAVEN_ENV') { sh "mvn ${MAVEN_ARGS}" } } } stage('clean container') { steps { sh 'docker ps -f name=${dockerContainerName} -q | xargs --no-run-if-empty docker container stop' sh 'docker container ls -a -fname=${dockerContainerName} -q | xargs -r docker container rm' sh 'docker images -q --filter=reference=${dockerImageName} | xargs --no-run-if-empty docker rmi -f' } } stage('docker-compose start') { steps { sh 'docker compose up -d' } } } }

Github

Как только мы завершим все предыдущие настройки, нам нужно поместить весь исходный код в наш репозиторий GitHub.

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

Новая ссылка на репозиторий для Jenkins будет выглядеть следующим образом:

https://access_token@github.com //yourRepoName.git

Настройка Jenkins

1. Установите плагины для интеграции с Maven Pipeline

Панель управления Jenkins> Управление Jenkins -> Управление плагинами

Найдите “maven” в разделе “Доступно” и выберите "Установить без перезагрузки".

Развёртывание API Spring Boot 3.0 с использованием Jenkins Pipeline и Docker

2. Добавьте глобальную конфигурацию инструмента

Панель инструментов Jenkins> Управление Jenkins -> Глобальная конфигурация инструмента

Развёртывание API Spring Boot 3.0 с использованием Jenkins Pipeline и Docker

3. Развёртывание стека

> Создать новый элемент

Развёртывание API Spring Boot 3.0 с использованием Jenkins Pipeline и Docker

> Конфигурация конвейера

Развёртывание API Spring Boot 3.0 с использованием Jenkins Pipeline и Docker
  • В поле "Определение" выберите опцию Pipeline script from SCM: При выборе опции Pipeline script from SCM вы не вводите никакой Groovy-код в пользовательский интерфейс Jenkins; вы просто указываете путь, из которого в исходном коде вы хотите извлечь конвейер.
  • В поле "SCM" выберите тип системы управления версиями репозитория, содержащего ваш файл Jenkins. Выберите опцию Git.
  • URL-адрес репозитория Git в поле "URL репозитория", где мы сохранили ваш скрипт конвейера (Для этой истории хранилище является общедоступным. Здесь не нужен личный доступ).
  • Название ветви репозитория Git в поле "Спецификатор ветви".

Не забудьте сохранить изменения!

Всё готово! Ваш конвейер создан!

Запуск Jenkins Pipeline

Нажмите на опцию Build Now, чтобы запустить Jenkins Pipeline. Мы можем видеть все этапы, которые были описаны в файле конвейера:

Развёртывание API Spring Boot 3.0 с использованием Jenkins Pipeline и Docker

После успешной сборки конвейера мы можем проверить контейнеры с помощью команды Docker docker ps:

Развёртывание API Spring Boot 3.0 с использованием Jenkins Pipeline и Docker

У вас получилось выполнить развёртывание! Мои поздравления!

Развёртывание API Spring Boot 3.0 с использованием Jenkins Pipeline и Docker

Заключение

В этой статье мы рассмотрели, как шаг за шагом развернуть приложение Spring boot с использованием Jenkins Pipeline и Docker.

Полный исходный код доступен на GitHub.

Спасибо за чтение!

Источники

Статья была взята из этого источника:

1 комментарий

Ок, а что это?)
Где используется ?

Ответить