Fix Deploy 2137
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				Optimized Build and Deploy with Maintenance Window / remote-build-and-deploy (push) Failing after 11s
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	Optimized Build and Deploy with Maintenance Window / remote-build-and-deploy (push) Failing after 11s
				
			This commit is contained in:
		| @@ -11,13 +11,7 @@ jobs: | |||||||
|  |  | ||||||
|     steps: |     steps: | ||||||
|       - name: Run Optimized CI/CD Process on Host via SSH |       - name: Run Optimized CI/CD Process on Host via SSH | ||||||
|         # Pasamos los nuevos secretos al entorno del script SSH |         # La sección 'env' aquí ya no es necesaria, pasamos los secretos directamente | ||||||
|         env: |  | ||||||
|           UPTIME_KUMA_URL: ${{ secrets.UPTIME_KUMA_URL }} |  | ||||||
|           UPTIME_KUMA_API_KEY: ${{ secrets.UPTIME_KUMA_API_KEY }} |  | ||||||
|           UPTIME_KUMA_MAINTENANCE_ID: ${{ secrets.UPTIME_KUMA_MAINTENANCE_ID }} |  | ||||||
|           DB_SA_PASSWORD_SECRET: ${{ secrets.DB_SA_PASSWORD_SECRET }} |  | ||||||
|  |  | ||||||
|         run: | |         run: | | ||||||
|           set -e |           set -e | ||||||
|            |            | ||||||
| @@ -28,55 +22,62 @@ jobs: | |||||||
|           chmod 600 ~/.ssh/id_rsa |           chmod 600 ~/.ssh/id_rsa | ||||||
|           ssh-keyscan -H ${{ secrets.PROD_SERVER_HOST }} >> ~/.ssh/known_hosts |           ssh-keyscan -H ${{ secrets.PROD_SERVER_HOST }} >> ~/.ssh/known_hosts | ||||||
|            |            | ||||||
|           # Ejecuta en el host remoto |           # --- ¡CAMBIO CLAVE AQUÍ! --- | ||||||
|           ssh ${{ secrets.PROD_SERVER_USER }}@${{ secrets.PROD_SERVER_HOST }} << 'EOSSH' |           # Inyectamos los secretos como variables de entorno para el comando remoto | ||||||
|  |           # Y luego ejecutamos el script del heredoc con 'bash -s' | ||||||
|  |           ssh ${{ secrets.PROD_SERVER_USER }}@${{ secrets.PROD_SERVER_HOST }} " | ||||||
|  |             export UPTIME_KUMA_URL='${{ secrets.UPTIME_KUMA_URL }}' | ||||||
|  |             export UPTIME_KUMA_API_KEY='${{ secrets.UPTIME_KUMA_API_KEY }}' | ||||||
|  |             export UPTIME_KUMA_MAINTENANCE_ID='${{ secrets.UPTIME_KUMA_MAINTENANCE_ID }}' | ||||||
|  |             export DB_SA_PASSWORD='${{ secrets.DB_SA_PASSWORD_SECRET }}' | ||||||
|  |             export GITEA_SHA='${{ gitea.sha }}' | ||||||
|  |             bash -s | ||||||
|  |           " << 'EOSSH' | ||||||
|             set -e |             set -e | ||||||
|             echo "--- INICIO DEL DESPLIEGUE OPTIMIZADO ---" |             echo "--- INICIO DEL DESPLIEGUE OPTIMIZADO ---" | ||||||
|              |              | ||||||
|             # --- SECCIÓN DE MONITOREO --- |             # --- SECCIÓN DE MONITOREO --- | ||||||
|  |             # Las variables (UPTIME_KUMA_URL, etc.) ahora están disponibles gracias al comando 'export' anterior. | ||||||
|  |              | ||||||
|             # Instalar curl y jq si no están presentes |             # Instalar curl y jq si no están presentes | ||||||
|             if ! command -v curl &> /dev/null || ! command -v jq &> /dev/null; then |             if ! command -v curl &> /dev/null || ! command -v jq &> /dev/null; then | ||||||
|               echo "Instalando curl y jq..." |               echo "Instalando curl y jq..." | ||||||
|               apt-get update -qq && apt-get install -y curl jq |               # Usar 'sudo' si el usuario no es root | ||||||
|  |               sudo apt-get update -qq && sudo apt-get install -y curl jq | ||||||
|             fi |             fi | ||||||
|              |              | ||||||
|             # Variables de Uptime Kuma (vienen de los secretos de Gitea) |  | ||||||
|             KUMA_URL="${UPTIME_KUMA_URL}" |  | ||||||
|             KUMA_API_KEY="${UPTIME_KUMA_API_KEY}" |  | ||||||
|             MAINTENANCE_ID="${UPTIME_KUMA_MAINTENANCE_ID}" |  | ||||||
|              |  | ||||||
|             # Función para cambiar el estado de la ventana de mantenimiento |             # Función para cambiar el estado de la ventana de mantenimiento | ||||||
|             # $1: El ID de la ventana |  | ||||||
|             # $2: 'true' para activar, 'false' para desactivar |  | ||||||
|             toggle_maintenance() { |             toggle_maintenance() { | ||||||
|               local id=$1 |               local id=$1 | ||||||
|               local active_state=$2 |               local active_state=$2 | ||||||
|               echo "Cambiando estado de mantenimiento a: $active_state" |               echo "Cambiando estado de mantenimiento de la ventana ID:${id} a: ${active_state}" | ||||||
|                |                | ||||||
|               # La API de Kuma para editar mantenimiento es un PATCH a /api/maintenance/{id} |               # Corregido: el endpoint es '/maintenances/' (plural) | ||||||
|               local response=$(curl -s -w "%{http_code}" -X PATCH "${KUMA_URL}/api/maintenances/${id}" \ |               local response=$(curl -s -w "%{http_code}" -X PATCH "${UPTIME_KUMA_URL}/api/maintenances/${id}" \ | ||||||
|                 -H "Content-Type: application/json" \ |                 -H "Content-Type: application/json" \ | ||||||
|                 -H "Authorization: Bearer ${KUMA_API_KEY}" \ |                 -H "Authorization: Bearer ${UPTIME_KUMA_API_KEY}" \ | ||||||
|                 --data-raw "{\"active\": ${active_state}}") |                 --data-raw "{\"active\": ${active_state}}") | ||||||
|                |                | ||||||
|               local http_code=$(tail -n1 <<< "$response") |               local http_code=$(tail -n1 <<< "$response") | ||||||
|               if [ "$http_code" -ne 200 ]; then |               if [ "$http_code" -ne 200 ]; then | ||||||
|                 echo "Error al interactuar con la API de Uptime Kuma. Código: $http_code" |                 echo "Error al interactuar con la API de Uptime Kuma. Código HTTP: $http_code" | ||||||
|  |                 # Opcional: imprimir el cuerpo de la respuesta para más detalles | ||||||
|  |                 echo "Cuerpo de la respuesta: $(head -n -1 <<< "$response")" | ||||||
|                 return 1 |                 return 1 | ||||||
|               fi |               fi | ||||||
|               echo "Estado de mantenimiento actualizado con éxito." |               echo "Estado de mantenimiento actualizado con éxito." | ||||||
|             } |             } | ||||||
|              |              | ||||||
|             # ¡MUY IMPORTANTE! Usamos 'trap' para asegurar que el monitoreo se reanude |             # Usamos 'trap' para asegurar que el monitoreo se reanude siempre. | ||||||
|             # incluso si el despliegue falla a la mitad. |             trap 'echo "--- Limpiando: Reanudando monitoreo ---"; toggle_maintenance "$UPTIME_KUMA_MAINTENANCE_ID" false' EXIT | ||||||
|             trap 'echo "--- Limpiando: Reanudando monitoreo ---"; toggle_maintenance "$MAINTENANCE_ID" false' EXIT |  | ||||||
|              |              | ||||||
|             # Activamos el mantenimiento antes de tocar nada |             # Activamos el mantenimiento | ||||||
|             echo "--- Pausando monitoreo en Uptime Kuma ---" |             echo "--- Pausando monitoreo en Uptime Kuma ---" | ||||||
|             toggle_maintenance "$MAINTENANCE_ID" true |             toggle_maintenance "$UPTIME_KUMA_MAINTENANCE_ID" true | ||||||
|  |              | ||||||
|             # --- FIN SECCIÓN DE MONITOREO --- |             # --- FIN SECCIÓN DE MONITOREO --- | ||||||
|  |  | ||||||
|             # 1. Preparar entorno (tu código original) |             # 1. Preparar entorno | ||||||
|             TEMP_DIR=$(mktemp -d) |             TEMP_DIR=$(mktemp -d) | ||||||
|             REPO_OWNER="dmolinari" |             REPO_OWNER="dmolinari" | ||||||
|             REPO_NAME="gestionintegralweb" |             REPO_NAME="gestionintegralweb" | ||||||
| @@ -85,39 +86,33 @@ jobs: | |||||||
|             echo "Clonando repositorio desde: $GITEA_REPO_PATH ..." |             echo "Clonando repositorio desde: $GITEA_REPO_PATH ..." | ||||||
|             git clone "$GITEA_REPO_PATH" "$TEMP_DIR" |             git clone "$GITEA_REPO_PATH" "$TEMP_DIR" | ||||||
|             cd "$TEMP_DIR" |             cd "$TEMP_DIR" | ||||||
|             git checkout "${{ gitea.sha }}" |             # La variable GITEA_SHA fue exportada antes del heredoc | ||||||
|  |             git checkout "$GITEA_SHA" | ||||||
|              |              | ||||||
|             # 2. Construcción paralela (tu código original) |             # 2. Construcción paralela | ||||||
|             build_image() { |             build_image() { | ||||||
|               local dockerfile=$1 |               local dockerfile=$1 | ||||||
|               local image_name=$2 |               local image_name=$2 | ||||||
|               local context=$3 |               local context=$3 | ||||||
|                |  | ||||||
|               echo "Construyendo $image_name..." |               echo "Construyendo $image_name..." | ||||||
|               docker build \ |               docker build -t "$image_name" -f "$dockerfile" "$context" | ||||||
|                 -t "$image_name" \ |  | ||||||
|                 -f "$dockerfile" \ |  | ||||||
|                 "$context" |  | ||||||
|             } |             } | ||||||
|              |  | ||||||
|             echo "Construyendo imágenes en paralelo..." |             echo "Construyendo imágenes en paralelo..." | ||||||
|             (build_image "Backend/GestionIntegral.Api/Dockerfile" "dmolinari/gestionintegralweb-backend:latest" ".") & |             (build_image "Backend/GestionIntegral.Api/Dockerfile" "dmolinari/gestionintegralweb-backend:latest" ".") & | ||||||
|             (build_image "Frontend/Dockerfile" "dmolinari/gestionintegralweb-frontend:latest" ".") & |             (build_image "Frontend/Dockerfile" "dmolinari/gestionintegralweb-frontend:latest" ".") & | ||||||
|             wait |             wait | ||||||
|              |              | ||||||
|             # 3. Despliegue con Docker Compose (tu código original) |             # 3. Despliegue con Docker Compose | ||||||
|             cd /opt/gestion-integral |             cd /opt/gestion-integral | ||||||
|             export DB_SA_PASSWORD='${DB_SA_PASSWORD_SECRET}' |             # La variable DB_SA_PASSWORD ya fue exportada al inicio. | ||||||
|              |  | ||||||
|             echo "--- INICIO DE LA RECREACIÓN DE SERVICIOS (MONITOREO PAUSADO) ---" |             echo "--- INICIO DE LA RECREACIÓN DE SERVICIOS (MONITOREO PAUSADO) ---" | ||||||
|             docker compose up -d --force-recreate |             docker compose up -d --force-recreate | ||||||
|             echo "--- FIN DE LA RECREACIÓN DE SERVICIOS ---" |             echo "--- FIN DE LA RECREACIÓN DE SERVICIOS ---" | ||||||
|              |              | ||||||
|             # 4. Limpieza (tu código original) |             # 4. Limpieza | ||||||
|             echo "Realizando limpieza de imágenes..." |             echo "Realizando limpieza de imágenes..." | ||||||
|             rm -rf "$TEMP_DIR" |             rm -rf "$TEMP_DIR" | ||||||
|             docker image prune -af --filter "until=24h" |             docker image prune -af --filter "until=24h" | ||||||
|              |              | ||||||
|             echo "--- DESPLIEGUE COMPLETADO CON ÉXITO ---" |             echo "--- DESPLIEGUE COMPLETADO CON ÉXITO ---" | ||||||
|             # El 'trap' se ejecutará automáticamente aquí para reanudar el monitoreo |  | ||||||
|           EOSSH |           EOSSH | ||||||
		Reference in New Issue
	
	Block a user