Files

127 lines
5.7 KiB
Groovy
Raw Permalink Normal View History

pipeline {
agent any
parameters {
string(
name: 'BRANCH',
defaultValue: 'dev',
description: 'Ветка для деплоя'
)
2025-12-02 17:06:04 +07:00
string(
name: 'SERVER',
defaultValue: '92.242.61.23',
description: 'Сервер для деплоя'
)
}
stages {
stage('Git pull') {
steps {
script {
checkout([
$class: 'GitSCM',
branches: [[name: params.BRANCH]],
userRemoteConfigs: [[
url: 'https://code.3err0.ru/backdev/no-copy.git',
credentialsId: 'nx-jen'
]]
])
}
}
}
2025-12-09 13:41:46 +07:00
stage('Deploy with docker-compose') {
steps {
script {
withCredentials([
usernamePassword(
credentialsId: 'server-root-password',
usernameVariable: 'SSH_USER',
passwordVariable: 'SSH_PASS'
)
]) {
sh """
2025-12-09 13:41:46 +07:00
echo "Deploying branch: ${params.BRANCH}"
2025-12-09 13:41:46 +07:00
echo "Copying files to server..."
sshpass -p '$SSH_PASS' ssh $SSH_USER@$SERVER "mkdir -p /opt/deployments/${params.BRANCH}"
sshpass -p '$SSH_PASS' scp -r ./* $SSH_USER@$SERVER:/opt/deployments/${params.BRANCH}/
2025-12-02 17:06:04 +07:00
sshpass -p '$SSH_PASS' ssh $SSH_USER@$SERVER "
cd /opt/deployments/${params.BRANCH}
2025-12-09 13:41:46 +07:00
echo 'Step 1: Checking current state...'
2025-12-09 13:41:46 +07:00
# Смотрим что запущено
docker ps --filter 'name=postgres|app-backend' --format 'table {{.Names}}\\t{{.Status}}\\t{{.Ports}}'
2025-12-09 13:41:46 +07:00
echo 'Step 2: Stopping only application (keeping DB)...'
2025-12-09 13:41:46 +07:00
# Останавливаем только приложение, БД оставляем работать
docker stop app-backend 2>/dev/null || echo 'App not running'
docker rm app-backend 2>/dev/null || echo 'App not found'
2025-12-09 13:41:46 +07:00
# Проверяем что БД работает, если нет - запускаем
if ! docker ps | grep -q postgres; then
echo 'Starting PostgreSQL...'
docker-compose up -d db
sleep 10
else
2025-12-09 13:41:46 +07:00
echo 'PostgreSQL already running'
fi
2025-12-09 13:41:46 +07:00
echo 'Step 3: Building new application image...'
docker build --no-cache -t app-backend:latest .
2025-12-09 13:41:46 +07:00
echo 'Step 4: Starting application...'
docker run -d \\
--name app-backend \\
--network app-network \\
-p 80:8080 \\
-e POSTGRES_DB=no_copy_ \\
-e POSTGRES_USER=postgres \\
-e POSTGRES_PASSWORD=postgres \\
-e POSTGRES_PORT=5432 \\
-e POSTGRES_HOST=db \\
--restart unless-stopped \\
app-backend:latest
echo 'Step 5: Checking deployment...'
sleep 10
2025-12-09 13:41:46 +07:00
echo 'Containers status:'
docker ps --filter 'name=postgres|app-backend' --format 'table {{.Names}}\\t{{.Status}}\\t{{.Ports}}'
2025-12-09 13:41:46 +07:00
echo 'Application logs (last 5 lines):'
docker logs --tail=5 app-backend 2>/dev/null || echo 'Logs not available yet'
if docker ps | grep -q app-backend; then
echo 'Deployment successful'
echo 'Application URL: http://${params.SERVER}:80'
else
echo 'Application failed to start'
docker logs app-backend
exit 1
fi
"
"""
}
}
}
}
}
post {
success {
2025-12-09 13:41:46 +07:00
echo "Deployment successful"
echo "Application URL: http://${params.SERVER}:80"
}
failure {
2025-12-09 13:41:46 +07:00
echo "Deployment failed for branch ${params.BRANCH}"
}
always {
echo "Deployment process finished"
}
}
}