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." } } }