Развёртывание API Spring Boot 3.0 с использованием Jenkins Pipeline и Docker
В этой статье мы объясним, как развернуть Spring boot-приложение с помощью 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.
Структура проекта
Вот структура нашего проекта:
Вот такой результат будет у нас при попытке получить список книг:
Контейнеризация приложения
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 /<Your_Org>/yourRepoName.git
Настройка Jenkins
1. Установите плагины для интеграции с Maven Pipeline
Панель управления Jenkins> Управление Jenkins -> Управление плагинами
Найдите “maven” в разделе “Доступно” и выберите “Установить без перезагрузки”.
2. Добавьте глобальную конфигурацию инструмента
Панель инструментов Jenkins> Управление Jenkins -> Глобальная конфигурация инструмента
3. Развёртывание стека
> Создать новый элемент
> Конфигурация конвейера
- В поле “Определение” выберите опцию Pipeline script from SCM: При выборе опции Pipeline script from SCM вы не вводите никакой Groovy-код в пользовательский интерфейс Jenkins; вы просто указываете путь, из которого в исходном коде вы хотите извлечь конвейер.
- В поле “SCM” выберите тип системы управления версиями репозитория, содержащего ваш файл Jenkins. Выберите опцию Git.
- URL-адрес репозитория Git в поле “URL репозитория”, где мы сохранили ваш скрипт конвейера (Для этой истории хранилище является общедоступным. Здесь не нужен личный доступ).
- Название ветви репозитория Git в поле “Спецификатор ветви”.
Не забудьте сохранить изменения!
Всё готово! Ваш конвейер создан!
Запуск Jenkins Pipeline
Нажмите на опцию Build Now, чтобы запустить Jenkins Pipeline. Мы можем видеть все этапы, которые были описаны в файле конвейера:
После успешной сборки конвейера мы можем проверить контейнеры с помощью команды Docker docker ps
:
У вас получилось выполнить развёртывание! Мои поздравления!
Заключение
В этой статье мы рассмотрели, как шаг за шагом развернуть приложение Spring boot с использованием Jenkins Pipeline и Docker.
Полный исходный код доступен на GitHub.
Спасибо за чтение!