diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b72c51b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +# Используем официальный образ OpenJDK 17 как базовый образ +FROM openjdk:17 + +# Установка рабочей директории внутри контейнера +WORKDIR /app + +# Копируем JAR-файл приложения из локальной директории внутрь контейнера +COPY ServerMonitorBot-0.0.1-SNAPSHOT.jar app.jar + +# Команда для запуска Spring Boot приложения при старте контейнера +CMD ["java", "-jar", "app.jar"] \ No newline at end of file diff --git a/Jenkinsfile_CD b/Jenkinsfile_CD new file mode 100644 index 0000000..8a49b26 --- /dev/null +++ b/Jenkinsfile_CD @@ -0,0 +1,64 @@ +pipeline { + agent { + docker { + image 'maven:3.9.5-eclipse-temurin-17' + args '-v /root/.m2:/root/.m2' + } + } + + environment { + SSH_HOST = credentials('ROCK_PI_5_SSH_HOST') + SSH_PORT = credentials('ROCK_PI_5_SSH_PORT') + SSH_USER = credentials('ROCK_PI_5_SSH_USER') + SSH_PASS = credentials('ROCK_PI_5_SSH_PASS') + PATH_TO_DEV_FOLDER = credentials('SERVERMONITORBOT_PATH_TO_DEV_FOLDER') + IMAGE_NAME = 'servermonitorbot' + IMAGE_VERSION = 'latest' + } + + stages { + stage('Init container') { + steps { + sh 'apt-get update && apt-get install -y sshpass openssh-client' + } + } + stage('Build') { + steps { + withCredentials([file(credentialsId: 'SERVERMONITORBOT_APPLICATION_YAML', variable: 'application_yaml')]) { + sh "cp -f \$application_yaml src/main/resources/application.yml" + } + sh 'mvn -B -DskipTests -X clean package spring-boot:repackage' + } + } + stage('Prune images pre') { + steps { + sh """ + sshpass -p ${SSH_PASS} ssh -o StrictHostKeyChecking=no ${SSH_USER}@${SSH_HOST} -p ${SSH_PORT} 'docker image prune --all --force' + """ + } + } + stage('Deploy') { + steps { + script { + sh """ + sshpass -p ${SSH_PASS} ssh -o StrictHostKeyChecking=no ${SSH_USER}@${SSH_HOST} -p ${SSH_PORT} 'mkdir -p ${PATH_TO_DEV_FOLDER}' + sshpass -p ${SSH_PASS} ssh -o StrictHostKeyChecking=no ${SSH_USER}@${SSH_HOST} -p ${SSH_PORT} 'rm -f ${PATH_TO_DEV_FOLDER}/{*.*}' + sshpass -p ${SSH_PASS} scp -o StrictHostKeyChecking=no -P ${SSH_PORT} target/*.jar ${SSH_USER}@${SSH_HOST}:${PATH_TO_DEV_FOLDER}/ + sshpass -p ${SSH_PASS} scp -o StrictHostKeyChecking=no -P ${SSH_PORT} Dockerfile ${SSH_USER}@${SSH_HOST}:${PATH_TO_DEV_FOLDER}/ + sshpass -p ${SSH_PASS} scp -o StrictHostKeyChecking=no -P ${SSH_PORT} docker-compose.yml ${SSH_USER}@${SSH_HOST}:${PATH_TO_DEV_FOLDER}/ + sshpass -p ${SSH_PASS} ssh -o StrictHostKeyChecking=no ${SSH_USER}@${SSH_HOST} -p ${SSH_PORT} 'cd ${PATH_TO_DEV_FOLDER} && docker build --no-cache -t ${IMAGE_NAME}:${IMAGE_VERSION} .' + sshpass -p ${SSH_PASS} ssh -o StrictHostKeyChecking=no ${SSH_USER}@${SSH_HOST} -p ${SSH_PORT} 'cd ${PATH_TO_DEV_FOLDER} && docker compose up -d' + """ + } + } + } + stage('Prune images post') { + steps { + sh """ + sshpass -p ${SSH_PASS} ssh -o StrictHostKeyChecking=no ${SSH_USER}@${SSH_HOST} -p ${SSH_PORT} 'docker image prune --all --force' + """ + } + } + } +} + diff --git a/Jenkinsfile_CI b/Jenkinsfile_CI new file mode 100644 index 0000000..5cf3091 --- /dev/null +++ b/Jenkinsfile_CI @@ -0,0 +1,15 @@ +pipeline { + agent { + docker { + image 'maven:3.9.5-eclipse-temurin-17' + args '-v /root/.m2:/root/.m2' + } + } + stages { + stage('Build') { + steps { + sh 'mvn -B -DskipTests -X clean package spring-boot:repackage' + } + } + } +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..652f996 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,21 @@ +version: '3' +services: + app: + build: + context: . + depends_on: + - db + networks: + default: + + db: + image: postgres:latest + environment: + POSTGRES_USER: servermonitorbot + POSTGRES_PASSWORD: servermonitorbot + POSTGRES_DB: servermonitorbot + networks: + default: + +networks: + default: diff --git a/pom.xml b/pom.xml index fbc64ec..9ecb466 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.1.2 + 3.1.3 ru.ldeloff @@ -15,6 +15,11 @@ ServerMonitorBot 17 + 9.16.0 + ${database.url} + ${database.username} + ${database.password} + ru.ldeloff.servermonitorbot.ServerMonitorBotApplication @@ -40,7 +45,7 @@ org.telegram telegrambots - 6.7.0 + 6.8.0 com.jcraft @@ -51,14 +56,15 @@ org.springframework.boot spring-boot-starter-data-jpa - - org.liquibase - liquibase-core - org.postgresql postgresql + + org.flywaydb + flyway-core + ${flyway.version} + @@ -75,6 +81,39 @@ + + org.flywaydb + flyway-maven-plugin + ${flyway.version} + + + migrate + deploy + + migrate + + + + + ${database.url} + ${database.username} + ${database.password} + + classpath:db/migration + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 35a985d..d69ecb8 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -2,20 +2,14 @@ spring: application: name: ServerMonitorBot datasource: - url: jdbc:postgresql://localhost:5432/servermonitorbot + url: jdbc:postgresql://db:5432/servermonitorbot username: servermonitorbot password: servermonitorbot jpa: hibernate: ddl-auto: none - liquibase: - enabled: true - change-log: classpath:db/scripts/changelog-master.xml - url: jdbc:postgresql://localhost:5432/servermonitorbot - user: servermonitorbot - password: servermonitorbot - liquibase-schema: "liquibase" - default-schema: "servermonitorbot" + flyway: + locations: classpath:db/migration bot: name: "ServerMonitorBot" token: "token" diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/01_create_table_users.sql b/src/main/resources/db/migration/V001__create_table_users.sql similarity index 90% rename from src/main/resources/db/scripts/release_0_0_1/scripts/01_create_table_users.sql rename to src/main/resources/db/migration/V001__create_table_users.sql index 9164f99..058d3f4 100644 --- a/src/main/resources/db/scripts/release_0_0_1/scripts/01_create_table_users.sql +++ b/src/main/resources/db/migration/V001__create_table_users.sql @@ -1,5 +1,3 @@ ---liquibase formatted sql - --changeset L_DelOff:create_table_users rollbackSplitStatements:true --comment: Создание таблицы пользователей CREATE TABLE users diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/02_create_table_roles.sql b/src/main/resources/db/migration/V002__create_table_roles.sql similarity index 88% rename from src/main/resources/db/scripts/release_0_0_1/scripts/02_create_table_roles.sql rename to src/main/resources/db/migration/V002__create_table_roles.sql index e7d5fad..76c5559 100644 --- a/src/main/resources/db/scripts/release_0_0_1/scripts/02_create_table_roles.sql +++ b/src/main/resources/db/migration/V002__create_table_roles.sql @@ -1,5 +1,3 @@ ---liquibase formatted sql - --changeset L_DelOff:create_table_roles rollbackSplitStatements:true --comment: Создание таблицы ролей CREATE TABLE roles diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/03_add_FK_users_to_roles.sql b/src/main/resources/db/migration/V003__add_FK_users_to_roles.sql similarity index 100% rename from src/main/resources/db/scripts/release_0_0_1/scripts/03_add_FK_users_to_roles.sql rename to src/main/resources/db/migration/V003__add_FK_users_to_roles.sql diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/04_add_roles.sql b/src/main/resources/db/migration/V004__add_roles.sql similarity index 100% rename from src/main/resources/db/scripts/release_0_0_1/scripts/04_add_roles.sql rename to src/main/resources/db/migration/V004__add_roles.sql diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/05_add_anonymous_role.sql b/src/main/resources/db/migration/V005__add_anonymous_role.sql similarity index 100% rename from src/main/resources/db/scripts/release_0_0_1/scripts/05_add_anonymous_role.sql rename to src/main/resources/db/migration/V005__add_anonymous_role.sql diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/06_refactor_users_table.sql b/src/main/resources/db/migration/V006__refactor_users_table.sql similarity index 100% rename from src/main/resources/db/scripts/release_0_0_1/scripts/06_refactor_users_table.sql rename to src/main/resources/db/migration/V006__refactor_users_table.sql diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/07_refactor_roles_table.sql b/src/main/resources/db/migration/V007__refactor_roles_table.sql similarity index 100% rename from src/main/resources/db/scripts/release_0_0_1/scripts/07_refactor_roles_table.sql rename to src/main/resources/db/migration/V007__refactor_roles_table.sql diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/08_add_roles.sql b/src/main/resources/db/migration/V008__add_roles.sql similarity index 100% rename from src/main/resources/db/scripts/release_0_0_1/scripts/08_add_roles.sql rename to src/main/resources/db/migration/V008__add_roles.sql diff --git a/src/main/resources/db/scripts/changelog-master.xml b/src/main/resources/db/scripts/changelog-master.xml deleted file mode 100644 index bd90cc4..0000000 --- a/src/main/resources/db/scripts/changelog-master.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/src/main/resources/db/scripts/release_0_0_1/changelog.xml b/src/main/resources/db/scripts/release_0_0_1/changelog.xml deleted file mode 100644 index 1b0334d..0000000 --- a/src/main/resources/db/scripts/release_0_0_1/changelog.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/main/resources/db/scripts/release_0_0_1/scripts/00_create_schema_servermonitorbot.sql b/src/main/resources/db/scripts/release_0_0_1/scripts/00_create_schema_servermonitorbot.sql deleted file mode 100644 index e69de29..0000000