diff --git a/infrastructure/jenkins/deploy.groovy b/infrastructure/jenkins/deploy.groovy index f19a80c..43b39ff 100644 --- a/infrastructure/jenkins/deploy.groovy +++ b/infrastructure/jenkins/deploy.groovy @@ -54,15 +54,26 @@ pipeline { echo 'Step 1: Checking current state...' # Смотрим что запущено - docker ps --filter 'name=postgres|app-backend' --format 'table {{.Names}}\\t{{.Status}}\\t{{.Ports}}' + docker ps --filter 'name=postgres|app-backend' --format 'table {{.Names}}\\t{{.Image}}\\t{{.Status}}\\t{{.Ports}}' - echo 'Step 2: Stopping only application (keeping DB)...' + echo 'Step 2: Force cleanup old application...' - # Останавливаем только приложение, БД оставляем работать + # Принудительно удаляем старый контейнер и образ docker stop app-backend 2>/dev/null || echo 'App not running' docker rm app-backend 2>/dev/null || echo 'App not found' + docker rmi app-backend:latest 2>/dev/null || echo 'Image not found' - # Проверяем что БД работает, если нет - запускаем + # Удаляем все образы app-backend + docker images --filter 'reference=app-backend*' -q | xargs -r docker rmi 2>/dev/null || echo 'No images to remove' + + echo 'Step 3: Verify copied files...' + echo 'Files in directory:' + ls -la + echo '' + echo 'Checking Java sources:' + find . -name '*.java' | head -2 + + echo 'Step 4: Check if PostgreSQL is running...' if ! docker ps | grep -q postgres; then echo 'Starting PostgreSQL...' docker-compose up -d db @@ -71,13 +82,37 @@ pipeline { echo 'PostgreSQL already running' fi - echo 'Step 3: Building new application image...' - docker build --no-cache -t app-backend:latest . + echo 'Step 5: Build application with forced rebuild...' + echo 'Checking Dockerfile exists:' + ls -la Dockerfile 2>/dev/null || echo 'Dockerfile not found, creating simple one' - echo 'Step 4: Starting application...' + # Если нет Dockerfile, создаем простой + if [ ! -f Dockerfile ]; then + echo 'Creating simple Dockerfile...' + cat > Dockerfile << 'EOF' +FROM eclipse-temurin:21-jre +WORKDIR /app +COPY . /app/ +CMD ["java", "-jar", "app.jar"] +EOF + fi + + # Собираем с подробным выводом + echo 'Building Docker image...' + docker build --no-cache --progress=plain -t app-backend:latest . 2>&1 | tail -50 + + echo 'Step 6: Verify new image...' + echo 'Current app-backend images:' + docker images | grep app-backend + + echo 'Image creation time:' + docker inspect app-backend:latest --format='{{.Created}}' 2>/dev/null || echo 'Cannot inspect image' + + echo 'Step 7: Starting application with alias...' docker run -d \\ --name app-backend \\ --network app-network \\ + --network-alias app \\ -p 80:8080 \\ -e POSTGRES_DB=no_copy_ \\ -e POSTGRES_USER=postgres \\ @@ -87,17 +122,35 @@ pipeline { --restart unless-stopped \\ app-backend:latest - echo 'Step 5: Checking deployment...' + echo 'Step 8: Checking deployment...' sleep 10 echo 'Containers status:' - docker ps --filter 'name=postgres|app-backend' --format 'table {{.Names}}\\t{{.Status}}\\t{{.Ports}}' + docker ps --filter 'name=postgres|app-backend' --format 'table {{.Names}}\\t{{.Image}}\\t{{.Status}}\\t{{.CreatedAt}}' - echo 'Application logs (last 5 lines):' - docker logs --tail=5 app-backend 2>/dev/null || echo 'Logs not available yet' + echo 'Checking image inside container:' + docker exec app-backend ls -la /app/ 2>/dev/null || echo 'Cannot check container files' + echo 'Application logs (last 10 lines):' + docker logs --tail=10 app-backend 2>/dev/null || echo 'Logs not available yet' + + echo 'Step 9: Health check...' if docker ps | grep -q app-backend; then - echo 'Deployment successful' + echo 'Container is running' + echo 'Testing application health...' + for i in {1..5}; do + if curl -s -f http://localhost:80/health > /dev/null 2>&1; then + echo 'Health check passed' + echo 'Deployment successful' + echo 'Application URL: http://${params.SERVER}:80' + exit 0 + fi + echo 'Waiting for application to start... attempt ' \$i + sleep 5 + done + + echo 'Health check failed, but container is running' + echo 'Application might be starting slowly' echo 'Application URL: http://${params.SERVER}:80' else echo 'Application failed to start'