From 02bf7868ee7b5b9fe9e46dfd04657899aed68bad Mon Sep 17 00:00:00 2001 From: vladp Date: Wed, 28 Jan 2026 18:19:20 +0700 Subject: [PATCH] dev add split network and add new ports with apps --- infrastructure/jenkins/README.md | 26 +++ infrastructure/jenkins/admin-panel.groovy | 156 +++++++++++++++ infrastructure/jenkins/deploy-backend.groovy | 130 +++++++++++++ infrastructure/jenkins/deploy-front.groovy | 157 ++++++++------- infrastructure/jenkins/dp-wtith-branch.groovy | 183 ------------------ infrastructure/jenkins/legal-panel.groovy | 156 +++++++++++++++ 6 files changed, 556 insertions(+), 252 deletions(-) create mode 100644 infrastructure/jenkins/README.md create mode 100644 infrastructure/jenkins/admin-panel.groovy create mode 100644 infrastructure/jenkins/deploy-backend.groovy delete mode 100644 infrastructure/jenkins/dp-wtith-branch.groovy create mode 100644 infrastructure/jenkins/legal-panel.groovy diff --git a/infrastructure/jenkins/README.md b/infrastructure/jenkins/README.md new file mode 100644 index 0000000..cbb48e3 --- /dev/null +++ b/infrastructure/jenkins/README.md @@ -0,0 +1,26 @@ +## Команды для помещения в сеть + +Сеть для работы бэка и фронта : Наименование == app-network-{port} + + +### Проверить состояние: + + +docker inspect {container-name} --format='{{range $net, $_ := .NetworkSettings.Networks}}{{$net}} {{end}}' + + +### Создать сеть ,если нет + +docker network create {name-network} 2>/dev/null || echo "Сеть уже существует" + +### Переместить контейнер: + +# Отключить от старой сети +docker network disconnect {network-name-old} {container-name} + +# Подключить к новой сети +docker network connect {network-name-new} {container-name} + +# Добавить алиас (опционально) +docker network connect --alias {alias} {network-name-new} {container-name} + diff --git a/infrastructure/jenkins/admin-panel.groovy b/infrastructure/jenkins/admin-panel.groovy new file mode 100644 index 0000000..7070f6f --- /dev/null +++ b/infrastructure/jenkins/admin-panel.groovy @@ -0,0 +1,156 @@ +pipeline { + agent any + + parameters { + string( + name: 'BRANCH', + defaultValue: 'main', + description: 'Ветка для деплоя админ-панели' + ) + string( + name: 'PORT', + defaultValue: '2996', + description: 'Порт для запуска экземпляра' + ) + } + + stages { + stage('Git pull') { + steps { + script { + checkout([ + $class: 'GitSCM', + branches: [[name: params.BRANCH]], + userRemoteConfigs: [[ + url: 'https://code.3err0.ru/frontdev/no-copy-admin-panel-frontend.git', + credentialsId: 'nx-jen' + ]] + ]) + } + } + } + + stage('Stop old') { + steps { + script { + withCredentials([ + usernamePassword( + credentialsId: 'server-root-password', + usernameVariable: 'SSH_USER', + passwordVariable: 'SSH_PASS' + ) + ]) { + sh """ + sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " + docker stop no-copy-admin-panel-${params.PORT} 2>/dev/null || true + docker rm no-copy-admin-panel-${params.PORT} 2>/dev/null || true + mkdir -p /opt/deployments/admin-panel/${params.BRANCH}-${params.PORT} + rm -rf /opt/deployments/admin-panel/${params.BRANCH}-${params.PORT}/* + " + """ + } + } + } + } + + stage('Copy to server') { + steps { + script { + withCredentials([ + usernamePassword( + credentialsId: 'server-root-password', + usernameVariable: 'SSH_USER', + passwordVariable: 'SSH_PASS' + ) + ]) { + sh """ + sshpass -p '$SSH_PASS' scp -r ./* $SSH_USER@92.242.61.23:/opt/deployments/admin-panel/${params.BRANCH}-${params.PORT}/ + """ + } + } + } + } + + stage('Build on server') { + steps { + script { + withCredentials([ + usernamePassword( + credentialsId: 'server-root-password', + usernameVariable: 'SSH_USER', + passwordVariable: 'SSH_PASS' + ) + ]) { + sh """ + sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " + cd /opt/deployments/admin-panel/${params.BRANCH}-${params.PORT} + docker build -t no-copy-admin-panel:${params.BRANCH}-${params.PORT} . + " + """ + } + } + } + } + + stage('Start on server') { + steps { + script { + withCredentials([ + usernamePassword( + credentialsId: 'server-root-password', + usernameVariable: 'SSH_USER', + passwordVariable: 'SSH_PASS' + ) + ]) { + sh """ + sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " + docker run -d \\ + --name no-copy-admin-panel-${params.PORT} \\ + --restart unless-stopped \\ + --network app-network \\ + -p ${params.PORT}:2996 \\ + no-copy-admin-panel:${params.BRANCH}-${params.PORT} + sleep 5 + docker ps --filter name=no-copy-admin-panel-${params.PORT} + " + """ + } + } + } + } + + stage('Check status') { + steps { + script { + withCredentials([ + usernamePassword( + credentialsId: 'server-root-password', + usernameVariable: 'SSH_USER', + passwordVariable: 'SSH_PASS' + ) + ]) { + sh """ + sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " + if docker ps --format '{{.Names}}' | grep -q 'no-copy-admin-panel-${params.PORT}'; then + HTTP_CODE=\$(curl -s -o /dev/null -w '%{http_code}' http://localhost:${params.PORT} 2>/dev/null || echo '000') + echo 'Admin panel available on http://92.242.61.23:${params.PORT}' + else + exit 1 + fi + " + """ + } + } + } + } + } + + post { + success { + echo "Admin panel ${params.BRANCH} deployed" + } + failure { + echo "Deployment failed" + } + } +} \ No newline at end of file diff --git a/infrastructure/jenkins/deploy-backend.groovy b/infrastructure/jenkins/deploy-backend.groovy new file mode 100644 index 0000000..8184794 --- /dev/null +++ b/infrastructure/jenkins/deploy-backend.groovy @@ -0,0 +1,130 @@ +pipeline { + agent any + + parameters { + string( + name: 'BRANCH', + defaultValue: 'dev', + description: 'Ветка для деплоя' + ) + string( + name: 'PORT', + defaultValue: '3000', + description: 'Порт для запуска экземпляра' + ) + string( + name: 'SERVER', + defaultValue: '92.242.61.23', + description: 'Сервер для деплоя' + ) + } + + stages { + stage('Git pull') { + steps { + cleanWs() + script { + checkout([ + $class: 'GitSCM', + branches: [[name: params.BRANCH]], + userRemoteConfigs: [[ + url: 'https://code.3err0.ru/backdev/no-copy.git', + credentialsId: 'nx-jen' + ]] + ]) + } + } + } + + stage('Deploy with docker-compose') { + steps { + script { + withCredentials([ + usernamePassword( + credentialsId: 'server-root-password', + usernameVariable: 'SSH_USER', + passwordVariable: 'SSH_PASS' + ), + string(credentialsId: 'DB_USER', variable: 'DB_USER'), + string(credentialsId: 'DB_PASSWORD', variable: 'DB_PASSWORD') + ]) { + sh """ + sshpass -p '$SSH_PASS' ssh -o StrictHostKeyChecking=no $SSH_USER@$SERVER ' + cd /opt/deployments/${params.BRANCH}-${params.PORT} + + echo "1. Останавливаем старые контейнеры порта ${params.PORT}..." + docker stop app-backend-${params.PORT} 2>/dev/null || echo "Контейнер не найден" + docker rm app-backend-${params.PORT} 2>/dev/null || echo "Контейнер не найден" + docker stop postgres-${params.PORT} 2>/dev/null || echo "Контейнер БД не найден" + docker rm postgres-${params.PORT} 2>/dev/null || echo "Контейнер БД не найден" + docker stop file-storage-${params.PORT} 2>/dev/null || echo "Контейнер storage не найден" + docker rm file-storage-${params.PORT} 2>/dev/null || echo "Контейнер storage не найден" + + echo "2. Запускаем БД..." + docker run -d \\ + --name postgres-${params.PORT} \\ + --network app-network \\ + --network-alias database-${params.PORT} \\ + -p ${params.PORT}0:5432 \\ + -e POSTGRES_DB=no_copy_${params.PORT} \\ + -e POSTGRES_USER=${DB_USER} \\ + -e POSTGRES_PASSWORD=${DB_PASSWORD} \\ + -v pgdata_${params.PORT}:/var/lib/postgresql/data \\ + postgres:17.7 + + echo "3. Запускаем storage..." + docker run -d \\ + --name file-storage-${params.PORT} \\ + --network app-network \\ + -v uploads_data_${params.PORT}:/storage:rw \\ + alpine:latest tail -f /dev/null + + echo "4. Ждем БД..." + sleep 15 + + echo "5. Собираем приложение..." + docker build --no-cache -t app-backend-${params.PORT}:latest . + + echo "6. Запускаем приложение..." + docker run -d \\ + --name app-backend-${params.PORT} \\ + --network app-network \\ + -p ${params.PORT}:8080 \\ + -v uploads_data_${params.PORT}:/data/uploads:rw \\ + -e POSTGRES_DB=no_copy_${params.PORT} \\ + -e POSTGRES_USER=${DB_USER} \\ + -e POSTGRES_PASSWORD=${DB_PASSWORD} \\ + -e POSTGRES_PORT=5432 \\ + -e POSTGRES_HOST=database-${params.PORT} \\ + app-backend-${params.PORT}:latest + + echo "7. Проверка..." + sleep 10 + + if curl -s -f http://localhost:${params.PORT}/health > /dev/null 2>&1; then + echo "Приложение работает на порту ${params.PORT}" + else + echo "Проверка health не удалась" + docker logs app-backend-${params.PORT} --tail=20 + fi + ' + """ + } + } + } + } + } + + post { + success { + echo "Deployment successful" + echo "Application URL: http://${params.SERVER}:${params.PORT}" + } + failure { + echo "Deployment failed for branch ${params.BRANCH} on port ${params.PORT}" + } + always { + echo "Deployment process finished" + } + } +} \ No newline at end of file diff --git a/infrastructure/jenkins/deploy-front.groovy b/infrastructure/jenkins/deploy-front.groovy index f8869ce..7e95dba 100644 --- a/infrastructure/jenkins/deploy-front.groovy +++ b/infrastructure/jenkins/deploy-front.groovy @@ -7,6 +7,11 @@ pipeline { defaultValue: 'main', description: 'Ветка для деплоя' ) + string( + name: 'PORT', + defaultValue: '2998', + description: 'Порт для запуска экземпляра' + ) } stages { @@ -36,19 +41,19 @@ pipeline { ) ]) { sh """ - sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " - docker stop no-copy-frontend 2>/dev/null || true - docker rm no-copy-frontend 2>/dev/null || true - - cd /opt/deployments/frontend/${params.BRANCH} 2>/dev/null || mkdir -p /opt/deployments/frontend/${params.BRANCH} - - if [ -f 'docker-compose.yaml' ]; then - docker-compose -f docker-compose.yaml down 2>/dev/null || true - elif [ -f 'docker-compose.yml' ]; then - docker-compose -f docker-compose.yml down 2>/dev/null || true - fi - " - """ + sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " + docker stop no-copy-frontend-${params.PORT} 2>/dev/null || true + docker rm no-copy-frontend-${params.PORT} 2>/dev/null || true + + cd /opt/deployments/frontend/${params.BRANCH}-${params.PORT} 2>/dev/null || mkdir -p /opt/deployments/frontend/${params.BRANCH}-${params.PORT} + + if [ -f 'docker-compose.yaml' ]; then + docker-compose -f docker-compose.yaml -p frontend-${params.PORT} down 2>/dev/null || true + elif [ -f 'docker-compose.yml' ]; then + docker-compose -f docker-compose.yml -p frontend-${params.PORT} down 2>/dev/null || true + fi + " + """ } } } @@ -65,13 +70,13 @@ pipeline { ) ]) { sh """ - sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " - rm -rf /opt/deployments/frontend/${params.BRANCH}/* - mkdir -p /opt/deployments/frontend/${params.BRANCH} - " - - sshpass -p '$SSH_PASS' scp -r ./* $SSH_USER@92.242.61.23:/opt/deployments/frontend/${params.BRANCH}/ - """ + sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " + rm -rf /opt/deployments/frontend/${params.BRANCH}-${params.PORT}/* + mkdir -p /opt/deployments/frontend/${params.BRANCH}-${params.PORT} + " + + sshpass -p '$SSH_PASS' scp -r ./* $SSH_USER@92.242.61.23:/opt/deployments/frontend/${params.BRANCH}-${params.PORT}/ + """ } } } @@ -88,19 +93,24 @@ pipeline { ) ]) { sh """ - sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " - cd /opt/deployments/frontend/${params.BRANCH} - - if [ -f 'docker-compose.yaml' ]; then - docker-compose -f docker-compose.yaml build - elif [ -f 'docker-compose.yml' ]; then - docker-compose -f docker-compose.yml build - else - echo 'Exception: docker-compose file not found' - exit 1 - fi - " - """ + sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " + cd /opt/deployments/frontend/${params.BRANCH}-${params.PORT} + + echo '=== Редактируем docker-compose.yml ===' + + # Меняем имя контейнера + sed -i 's/container_name: no-copy-frontend\$/container_name: no-copy-frontend-${params.PORT}/' docker-compose.yml + + # Меняем порт (2998 на нужный порт) + sed -i 's/\\\"2998:2999\\\"/\\\"${params.PORT}:2999\\\"/' docker-compose.yml + + echo 'Проверяем изменения:' + grep -n 'container_name\\|ports' docker-compose.yml + + echo '=== Строим образ ===' + docker-compose -f docker-compose.yml -p frontend-${params.PORT} build + " + """ } } } @@ -117,24 +127,26 @@ pipeline { ) ]) { sh """ - sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " - cd /opt/deployments/frontend/${params.BRANCH} - - # Проверяем и подключаем к сети app-network если нужно - docker network inspect app-network 2>/dev/null || echo 'Warning: app-network not found' - - if [ -f 'docker-compose.yaml' ]; then - docker-compose -f docker-compose.yaml up -d - elif [ -f 'docker-compose.yml' ]; then - docker-compose -f docker-compose.yml up -d - fi - - sleep 10 - - echo 'Status container:' - docker ps --filter name=no-copy-frontend - " - """ + sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " + cd /opt/deployments/frontend/${params.BRANCH}-${params.PORT} + + echo '=== Запускаем контейнер ===' + docker-compose -f docker-compose.yml -p frontend-${params.PORT} up -d + + sleep 10 + + echo '=== Проверяем запуск ===' + if docker ps --format '{{.Names}}' | grep -q 'no-copy-frontend-${params.PORT}'; then + echo '✓ Контейнер запущен: no-copy-frontend-${params.PORT}' + echo '✓ Порт: ${params.PORT}:2999' + else + echo '✗ Контейнер не запустился' + echo 'Логи:' + docker-compose -f docker-compose.yml -p frontend-${params.PORT} logs + exit 1 + fi + " + """ } } } @@ -151,23 +163,29 @@ pipeline { ) ]) { sh """ - sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " - if docker ps --format '{{.Names}}' | grep -q 'no-copy-frontend'; then - echo 'Container started' - - sleep 5 - - HTTP_CODE=\$(curl -s -o /dev/null -w '%{http_code}' http://localhost:2998 || echo '000') - echo 'HTTP code: \$HTTP_CODE' - - echo 'Frontend available on http://92.242.61.23:2998' - else - echo 'Exception: container did not start' - docker ps -a | grep frontend - exit 1 - fi - " - """ + sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " + # Ищем контейнер с правильным именем (с портом) + if docker ps --format '{{.Names}}' | grep -q 'no-copy-frontend-${params.PORT}'; then + echo 'Container started: no-copy-frontend-${params.PORT}' + + sleep 5 + + HTTP_CODE=\$(curl -s -o /dev/null -w '%{http_code}' http://localhost:${params.PORT} || echo '000') + echo 'HTTP code: \$HTTP_CODE' + + echo 'Frontend available on http://92.242.61.23:${params.PORT}' + + # Показываем все фронтенды + echo '' + echo 'All frontend containers:' + docker ps --filter name=no-copy-frontend --format 'table {{.Names}}\\t{{.Ports}}\\t{{.Status}}' + else + echo 'Exception: container did not start' + docker ps -a | grep frontend + exit 1 + fi + " + """ } } } @@ -177,7 +195,8 @@ pipeline { post { success { echo "Front branch ${params.BRANCH} deployment completed" - echo "Frontend available on http://92.242.61.23:2998" + echo "Frontend available on http://92.242.61.23:${params.PORT}" + echo "Container: no-copy-frontend-${params.PORT}" } failure { echo "Deployment failed" diff --git a/infrastructure/jenkins/dp-wtith-branch.groovy b/infrastructure/jenkins/dp-wtith-branch.groovy deleted file mode 100644 index e0a2094..0000000 --- a/infrastructure/jenkins/dp-wtith-branch.groovy +++ /dev/null @@ -1,183 +0,0 @@ -pipeline { - agent any - - parameters { - string( - name: 'BRANCH', - defaultValue: 'main', - description: 'Ветка для деплоя' - ) - } - - stages { - stage('Git pull') { - steps { - script { - checkout([ - $class: 'GitSCM', - branches: [[name: params.BRANCH]], - userRemoteConfigs: [[ - url: 'https://code.3err0.ru/frontdev/no-copy-frontend.git', - credentialsId: 'nx-jen' - ]] - ]) - } - } - } - - stage('Stop old') { - steps { - script { - withCredentials([ - usernamePassword( - credentialsId: 'server-root-password', - usernameVariable: 'SSH_USER', - passwordVariable: 'SSH_PASS' - ) - ]) { - sh """ - sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " - docker stop no-copy-frontend 2>/dev/null || true - docker rm no-copy-frontend 2>/dev/null || true - - cd /opt/deployments/frontend/${params.BRANCH} 2>/dev/null || mkdir -p /opt/deployments/frontend/${params.BRANCH} - - if [ -f 'docker-compose.yaml' ]; then - docker-compose -f docker-compose.yaml down 2>/dev/null || true - elif [ -f 'docker-compose.yml' ]; then - docker-compose -f docker-compose.yml down 2>/dev/null || true - fi - " - """ - } - } - } - } - - stage('Copy to server') { - steps { - script { - withCredentials([ - usernamePassword( - credentialsId: 'server-root-password', - usernameVariable: 'SSH_USER', - passwordVariable: 'SSH_PASS' - ) - ]) { - sh """ - sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " - rm -rf /opt/deployments/frontend/${params.BRANCH}/* - mkdir -p /opt/deployments/frontend/${params.BRANCH} - " - - sshpass -p '$SSH_PASS' scp -r ./* $SSH_USER@92.242.61.23:/opt/deployments/frontend/${params.BRANCH}/ - """ - } - } - } - } - - stage('Build on server') { - steps { - script { - withCredentials([ - usernamePassword( - credentialsId: 'server-root-password', - usernameVariable: 'SSH_USER', - passwordVariable: 'SSH_PASS' - ) - ]) { - sh """ - sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " - cd /opt/deployments/frontend/${params.BRANCH} - - if [ -f 'docker-compose.yaml' ]; then - docker-compose -f docker-compose.yaml build - elif [ -f 'docker-compose.yml' ]; then - docker-compose -f docker-compose.yml build - else - echo 'Exception:don't found docker-compose' - exit 1 - fi - " - """ - } - } - } - } - - stage('Start on server') { - steps { - script { - withCredentials([ - usernamePassword( - credentialsId: 'server-root-password', - usernameVariable: 'SSH_USER', - passwordVariable: 'SSH_PASS' - ) - ]) { - sh """ - sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " - cd /opt/deployments/frontend/${params.BRANCH} - - if [ -f 'docker-compose.yaml' ]; then - docker-compose -f docker-compose.yaml up -d - elif [ -f 'docker-compose.yml' ]; then - docker-compose -f docker-compose.yml up -d - fi - - sleep 10 - - echo 'Status container:' - docker ps --filter name=no-copy-frontend - " - """ - } - } - } - } - - stage('Check status') { - steps { - script { - withCredentials([ - usernamePassword( - credentialsId: 'server-root-password', - usernameVariable: 'SSH_USER', - passwordVariable: 'SSH_PASS' - ) - ]) { - sh """ - sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " - if docker ps --format '{{.Names}}' | grep -q 'no-copy-frontend'; then - echo 'Container start' - - sleep 5 - - HTTP_CODE=\$(curl -s -o /dev/null -w '%{http_code}' http://localhost:2998 || echo '000') - echo 'HTTP код: ' \$HTTP_CODE - - echo 'Frong start on http://92.242.61.23:2998' - else - echo 'Exception: container don't start' - docker ps -a | grep frontend - exit 1 - fi - " - """ - } - } - } - } - } - - post { - success { - echo "Front branch ${params.BRANCH} completed" - echo "Use on http://92.242.61.23:2998" - } - failure { - echo "Failed" - } - } -} \ No newline at end of file diff --git a/infrastructure/jenkins/legal-panel.groovy b/infrastructure/jenkins/legal-panel.groovy new file mode 100644 index 0000000..5237c23 --- /dev/null +++ b/infrastructure/jenkins/legal-panel.groovy @@ -0,0 +1,156 @@ +pipeline { + agent any + + parameters { + string( + name: 'BRANCH', + defaultValue: 'main', + description: 'Ветка для деплоя легальной панели' + ) + string( + name: 'PORT', + defaultValue: '2997', + description: 'Порт для запуска экземпляра' + ) + } + + stages { + stage('Git pull') { + steps { + script { + checkout([ + $class: 'GitSCM', + branches: [[name: params.BRANCH]], + userRemoteConfigs: [[ + url: 'https://code.3err0.ru/frontdev/no-copy-legal-panel-frontend.git', + credentialsId: 'nx-jen' + ]] + ]) + } + } + } + + stage('Stop old') { + steps { + script { + withCredentials([ + usernamePassword( + credentialsId: 'server-root-password', + usernameVariable: 'SSH_USER', + passwordVariable: 'SSH_PASS' + ) + ]) { + sh """ + sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " + docker stop no-copy-legal-panel-${params.PORT} 2>/dev/null || true + docker rm no-copy-legal-panel-${params.PORT} 2>/dev/null || true + mkdir -p /opt/deployments/legal-panel/${params.BRANCH}-${params.PORT} + rm -rf /opt/deployments/legal-panel/${params.BRANCH}-${params.PORT}/* + " + """ + } + } + } + } + + stage('Copy to server') { + steps { + script { + withCredentials([ + usernamePassword( + credentialsId: 'server-root-password', + usernameVariable: 'SSH_USER', + passwordVariable: 'SSH_PASS' + ) + ]) { + sh """ + sshpass -p '$SSH_PASS' scp -r ./* $SSH_USER@92.242.61.23:/opt/deployments/legal-panel/${params.BRANCH}-${params.PORT}/ + """ + } + } + } + } + + stage('Build on server') { + steps { + script { + withCredentials([ + usernamePassword( + credentialsId: 'server-root-password', + usernameVariable: 'SSH_USER', + passwordVariable: 'SSH_PASS' + ) + ]) { + sh """ + sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " + cd /opt/deployments/legal-panel/${params.BRANCH}-${params.PORT} + docker build -t no-copy-legal-panel:${params.BRANCH}-${params.PORT} . + " + """ + } + } + } + } + + stage('Start on server') { + steps { + script { + withCredentials([ + usernamePassword( + credentialsId: 'server-root-password', + usernameVariable: 'SSH_USER', + passwordVariable: 'SSH_PASS' + ) + ]) { + sh """ + sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " + docker run -d \\ + --name no-copy-legal-panel-${params.PORT} \\ + --restart unless-stopped \\ + --network app-network \\ + -p ${params.PORT}:2997 \\ + no-copy-legal-panel:${params.BRANCH}-${params.PORT} + sleep 5 + docker ps --filter name=no-copy-legal-panel-${params.PORT} + " + """ + } + } + } + } + + stage('Check status') { + steps { + script { + withCredentials([ + usernamePassword( + credentialsId: 'server-root-password', + usernameVariable: 'SSH_USER', + passwordVariable: 'SSH_PASS' + ) + ]) { + sh """ + sshpass -p '$SSH_PASS' ssh $SSH_USER@92.242.61.23 " + if docker ps --format '{{.Names}}' | grep -q 'no-copy-legal-panel-${params.PORT}'; then + HTTP_CODE=\$(curl -s -o /dev/null -w '%{http_code}' http://localhost:${params.PORT} 2>/dev/null || echo '000') + echo 'Legal panel available on http://92.242.61.23:${params.PORT}' + else + exit 1 + fi + " + """ + } + } + } + } + } + + post { + success { + echo "Legal panel ${params.BRANCH} deployed on port ${params.PORT}" + } + failure { + echo "Deployment failed" + } + } +} \ No newline at end of file