diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 7533a47..075804b 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -1,4 +1,4 @@ -name: Optimized Build and Deploy +name: Optimized Build and Deploy with Maintenance Window on: push: @@ -11,6 +11,13 @@ jobs: steps: - name: Run Optimized CI/CD Process on Host via SSH + # Pasamos los nuevos secretos al entorno del script SSH + 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: | set -e @@ -26,7 +33,50 @@ jobs: set -e echo "--- INICIO DEL DESPLIEGUE OPTIMIZADO ---" - # 1. Preparar entorno + # --- SECCIÓN DE MONITOREO --- + # Instalar curl y jq si no están presentes + if ! command -v curl &> /dev/null || ! command -v jq &> /dev/null; then + echo "Instalando curl y jq..." + apt-get update -qq && apt-get install -y curl jq + 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 + # $1: El ID de la ventana + # $2: 'true' para activar, 'false' para desactivar + toggle_maintenance() { + local id=$1 + local active_state=$2 + echo "Cambiando estado de mantenimiento a: $active_state" + + # La API de Kuma para editar mantenimiento es un PATCH a /api/maintenance/{id} + local response=$(curl -s -w "%{http_code}" -X PATCH "${KUMA_URL}/api/maintenances/${id}" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer ${KUMA_API_KEY}" \ + --data-raw "{\"active\": ${active_state}}") + + local http_code=$(tail -n1 <<< "$response") + if [ "$http_code" -ne 200 ]; then + echo "Error al interactuar con la API de Uptime Kuma. Código: $http_code" + return 1 + fi + echo "Estado de mantenimiento actualizado con éxito." + } + + # ¡MUY IMPORTANTE! Usamos 'trap' para asegurar que el monitoreo se reanude + # incluso si el despliegue falla a la mitad. + trap 'echo "--- Limpiando: Reanudando monitoreo ---"; toggle_maintenance "$MAINTENANCE_ID" false' EXIT + + # Activamos el mantenimiento antes de tocar nada + echo "--- Pausando monitoreo en Uptime Kuma ---" + toggle_maintenance "$MAINTENANCE_ID" true + # --- FIN SECCIÓN DE MONITOREO --- + + # 1. Preparar entorno (tu código original) TEMP_DIR=$(mktemp -d) REPO_OWNER="dmolinari" REPO_NAME="gestionintegralweb" @@ -37,7 +87,7 @@ jobs: cd "$TEMP_DIR" git checkout "${{ gitea.sha }}" - # 2. Construcción paralela con Docker nativo (más rápido y fiable) + # 2. Construcción paralela (tu código original) build_image() { local dockerfile=$1 local image_name=$2 @@ -55,18 +105,19 @@ jobs: (build_image "Frontend/Dockerfile" "dmolinari/gestionintegralweb-frontend:latest" ".") & wait - # 3. Despliegue con Docker Compose + # 3. Despliegue con Docker Compose (tu código original) cd /opt/gestion-integral - export DB_SA_PASSWORD='${{ secrets.DB_SA_PASSWORD_SECRET }}' + export DB_SA_PASSWORD='${DB_SA_PASSWORD_SECRET}' - echo "Recreando servicios..." + echo "--- INICIO DE LA RECREACIÓN DE SERVICIOS (MONITOREO PAUSADO) ---" docker compose up -d --force-recreate + echo "--- FIN DE LA RECREACIÓN DE SERVICIOS ---" - # 4. Limpieza - echo "Realizando limpieza..." + # 4. Limpieza (tu código original) + echo "Realizando limpieza de imágenes..." rm -rf "$TEMP_DIR" docker image prune -af --filter "until=24h" echo "--- DESPLIEGUE COMPLETADO CON ÉXITO ---" - echo "Tiempo total: $(($SECONDS / 60)) minutos y $(($SECONDS % 60)) segundos" + # El 'trap' se ejecutará automáticamente aquí para reanudar el monitoreo EOSSH \ No newline at end of file