diff --git a/deploy.sh b/deploy.sh index c05dbf9..ff5d152 100644 --- a/deploy.sh +++ b/deploy.sh @@ -16,8 +16,16 @@ SSH_CONTROL_PATH="${SSH_CONTROL_DIR}/debian_92.243.27.35_22" # Fonction pour nettoyer une connexion SSH morte cleanup_dead_ssh() { - ssh -O exit -o ControlPath="${SSH_CONTROL_PATH}" ${SERVER} 2>/dev/null || true + # Essayer de fermer proprement la connexion si elle existe + if [ -S "${SSH_CONTROL_PATH}" ]; then + ssh -O exit -o ControlPath="${SSH_CONTROL_PATH}" ${SERVER} 2>/dev/null || true + # Attendre un peu pour que la fermeture se termine + sleep 0.5 + fi + # Forcer la suppression du socket même s'il existe encore rm -f "${SSH_CONTROL_PATH}" 2>/dev/null || true + # Nettoyer aussi le répertoire parent s'il est vide + rmdir "${SSH_CONTROL_DIR}" 2>/dev/null || true } # Fonction pour vérifier si la connexion SSH maître est valide @@ -27,11 +35,11 @@ check_ssh_connection() { # Fonction pour exécuter une commande SSH avec connexion persistante et gestion d'erreurs robuste ssh_exec() { - local max_retries=3 + local max_retries=2 local retry_count=0 while [ $retry_count -lt $max_retries ]; do - # Vérifier si la connexion maître existe et est valide + # Nettoyer le socket s'il existe mais est invalide if [ -S "${SSH_CONTROL_PATH}" ]; then if ! check_ssh_connection; then # Connexion morte, nettoyer avant de réessayer @@ -40,6 +48,7 @@ ssh_exec() { fi # Exécuter la commande SSH + # Si le socket existe mais est invalide, SSH avec ControlMaster=auto le détectera et créera une nouvelle connexion if ssh -o ControlMaster=auto \ -o ControlPath="${SSH_CONTROL_PATH}" \ -o ControlPersist=300 \ @@ -147,26 +156,10 @@ echo "5. Vérification du dépôt Git sur le serveur..." if ssh_exec "cd ${APP_DIR} && git status >/dev/null 2>&1" >/dev/null 2>&1; then echo " ✓ Dépôt Git détecté" else - SSH_EXIT_CODE=$? - # Vérifier si c'est une erreur de connexion SSH ou si Git n'est pas initialisé - if [ $SSH_EXIT_CODE -ne 0 ]; then - echo " ⚠ Erreur de connexion SSH ou dépôt Git non initialisé" - echo " Tentative de nettoyage et nouvelle connexion..." - cleanup_dead_ssh - sleep 2 - # Réessayer une fois après nettoyage - if ssh_exec "cd ${APP_DIR} && git status >/dev/null 2>&1" >/dev/null 2>&1; then - echo " ✓ Dépôt Git détecté après réessai" - else - echo " ⚠ Dépôt Git non initialisé, initialisation..." - ssh_exec "cd ${APP_DIR} && git init && git remote add origin ${GIT_REPO} 2>/dev/null || git remote set-url origin ${GIT_REPO}" - ssh_exec "cd ${APP_DIR} && git checkout -b ${BRANCH} 2>/dev/null || true" - fi - else - echo " ⚠ Dépôt Git non initialisé, initialisation..." - ssh_exec "cd ${APP_DIR} && git init && git remote add origin ${GIT_REPO} 2>/dev/null || git remote set-url origin ${GIT_REPO}" - ssh_exec "cd ${APP_DIR} && git checkout -b ${BRANCH} 2>/dev/null || true" - fi + echo " ⚠ Dépôt Git non initialisé, initialisation..." + # Initialiser le dépôt Git en une seule commande pour réduire les appels SSH + ssh_exec "cd ${APP_DIR} && (git init 2>/dev/null || true) && (git remote add origin ${GIT_REPO} 2>/dev/null || git remote set-url origin ${GIT_REPO}) && (git checkout -b ${BRANCH} 2>/dev/null || true)" + echo " ✓ Dépôt Git initialisé" fi # Récupérer les dernières modifications