kind: pipeline type: docker name: spring-boot-java21 workspace: base: /drone/src steps: # Paso 1: Build y tests con Maven (Java 21) - name: build-and-test image: maven:3.9-eclipse-temurin-21-alpine environment: MAVEN_OPTS: -Xmx2048m -XX:+TieredCompilation -XX:TieredStopAtLevel=1 commands: - mvn clean verify - mvn jacoco:report # Generar reporte de cobertura volumes: - name: maven-cache path: /root/.m2 # # Paso 2: Análisis SonarQube con Maven # - name: sonarqube-analysis # image: maven:3.9-eclipse-temurin-21-alpine # environment: # #SONAR_HOST_URL: ${SONARQUBE_URL} # URL de tu servidor SonarQube # #SONAR_LOGIN: ${SONARQUBE_TOKEN} # Token de autenticación en SonarQube # #SONAR_PROJECT_KEY: ${SONARQUBE_PROJECT_KEY} # Clave del proyecto en SonarQube # SONAR_HOST_URL: http://10.0.0.126:9000 # URL de tu servidor SonarQube # SONAR_LOGIN: squ_465ae384ffda803d8e58d9ef0111bef1277c874a # Token de autenticación en SonarQube # SONAR_PROJECT_KEY: hhh # Clave del proyecto en SonarQube # commands: # #- mvn sonar:sonar # Ejecuta el análisis de SonarQube usando Maven # - mvn clean verify sonar:sonar -DskipTests # when: # event: [push, pull_request] # Paso 3: Build y Push de Docker Image a Nexus (NUEVO) - name: docker-build-push image: docker:20.10.24 environment: NEXUS_USER: yandel # Usuario de Nexus con permisos push NEXUS_PASSWORD: yandel # Contraseña del usuario REGISTRY_ADDRESS: 10.0.0.126:8085 REPOSITORY_NAME: docker-repository # Nombre del repositorio Docker en Nexus commands: # Login a Nexus Docker Registry - docker login -u $NEXUS_USER -p $NEXUS_PASSWORD $REGISTRY_ADDRESS # Construir imagen con tag dinámico - docker build -t $REGISTRY_ADDRESS/$REPOSITORY_NAME/${DRONE_REPO_NAME}:${DRONE_COMMIT_SHA} -f src/main/docker/dockerfile . # -f para especificar ruta # Push de la imagen - docker push $REGISTRY_ADDRESS/$REPOSITORY_NAME/${DRONE_REPO_NAME}:${DRONE_COMMIT_SHA} volumes: - name: docker-sock path: /var/run/docker.sock # Paso 4: Despliegue en Servidor Externo - name: deploy-to-server image: appleboy/ssh environment: SSH_USER: "root" SSH_HOST: "10.0.0.117" SSH_PASSWORD: "admin123" # O usa SSH_KEY REGISTRY_ADDRESS: "10.0.0.126:8085" REPOSITORY_NAME: "docker-repository" settings: host: ${SSH_HOST} username: ${SSH_USER} password: ${SSH_PASSWORD} # ⚠️ Recomendado usar secretos en Drone script: #- docker login -u $NEXUS_USER -p $NEXUS_PASSWORD $REGISTRY_ADDRESS #- docker pull $REGISTRY_ADDRESS/$REPOSITORY_NAME/${DRONE_REPO_NAME}:${DRONE_COMMIT_SHA} #- docker --debug login -u $NEXUS_USER -p $NEXUS_PASSWORD $REGISTRY_ADDRESS #- docker --debug pull $REGISTRY_ADDRESS/$REPOSITORY_NAME/${DRONE_REPO_NAME}:${DRONE_COMMIT_SHA} #- docker stop mi-app || true #- docker rm mi-app || true #- docker run -d --name mi-app -p 8082:8080 $REGISTRY_ADDRESS/$REPOSITORY_NAME/${DRONE_REPO_NAME}:${DRONE_COMMIT_SHA} - docker pull 10.0.0.126:8085/docker-repository/prueba:434bd2209abad76d0e61272ecfe9f9b65ccbb7b5 - docker run -d --name mi-app -p 8082:8080 prueba:434bd2209abad76d0e61272ecfe9f9b65ccbb7b5 volumes: - name: maven-cache temp: {} - name: docker-sock host: path: /var/run/docker.sock # Montar socket de Docker