Jenkinsfile 2.79 KB
pipeline {
    agent any
    
    tools {
        // Asegurar que Jenkins tenga configurado el JDK 21 y Maven 3
        jdk 'Java 21'
        maven 'Maven 3'
    }

    environment {
        // Variables del Contenedor de Producción (GeoServer)
        SERVER_IP = '192.168.1.123'
        // NOTA: Reemplazar por la Credencial SSH configurada en Jenkins para apuntar a root@192.168.1.123
        SSH_CREDENTIAL_ID = 'sigem-server-123'
        IMAGE_NAME = 'sigem/gis-geoserver-app:latest'
        TAR_FILE = 'gis-backend.tar'
    }

    stages {
        stage('Clonar Repositorio (Checkout)') {
            steps {
                checkout scm
                echo "Código Fuente clonado y listo para validación."
            }
        }
        
        stage('Compilación Java (Build & Test)') {
            steps {
                echo "Empaquetando microservicio con Maven..."
                sh 'mvn clean package -DskipTests'
                echo "Archivo .jar generado con éxito."
            }
        }
        
        stage('Construcción de Imagen Docker') {
            steps {
                echo "Construyendo imagen Docker usando Temurin JDK 21..."
                sh "docker build -t ${IMAGE_NAME} ."
            }
        }
        
        stage('Exportación y Despliegue Secuencial') {
            steps {
                sshagent([SSH_CREDENTIAL_ID]) {
                    echo "Exportando contenedor a archivo tar. Esto toma unos segundos..."
                    sh "docker save ${IMAGE_NAME} > ${TAR_FILE}"
                    
                    echo "Transfiriendo archivos vía SCP hacia 192.168.1.123..."
                    sh "scp -o StrictHostKeyChecking=no ${TAR_FILE} root@${SERVER_IP}:/tmp/${TAR_FILE}"
                    sh "ssh -o StrictHostKeyChecking=no root@${SERVER_IP} 'mkdir -p /opt/gis-backend/'"
                    sh "scp -o StrictHostKeyChecking=no docker-compose.yml root@${SERVER_IP}:/opt/gis-backend/"
                    
                    echo "Levantando el Sistema Remotamente en el Nodo PostGIS..."
                    sh '''
                    ssh -o StrictHostKeyChecking=no root@${SERVER_IP} "
                        cd /opt/gis-backend/
                        docker load < /tmp/${TAR_FILE}
                        docker compose down
                        docker compose up -d
                        rm -f /tmp/${TAR_FILE}
                        echo 'Microservicio Reiniciado sin caída de datos.'
                    "
                    '''
                }
            }
        }
    }
    
    post {
        success {
            echo "Despliegue del Módulo GIS completado de forma impecable. Disponible en el puerto 8081."
        }
        failure {
            echo "La compilación o el despliegue del mapa ha fallado. Revisa los logs de SSH."
        }
    }
}
GitLab Appliance - Powered by TurnKey Linux