Развёртывание 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 /<Your_Org>/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
  1. В поле “Определение” выберите опцию Pipeline script from SCM: При выборе опции Pipeline script from SCM вы не вводите никакой Groovy-код в пользовательский интерфейс Jenkins; вы просто указываете путь, из которого в исходном коде вы хотите извлечь конвейер.
  2. В поле “SCM” выберите тип системы управления версиями репозитория, содержащего ваш файл Jenkins. Выберите опцию Git.
  3. URL-адрес репозитория Git в поле “URL репозитория”, где мы сохранили ваш скрипт конвейера (Для этой истории хранилище является общедоступным. Здесь не нужен личный доступ).
  4. Название ветви репозитория 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
0
+1
5
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *