Reduce SSH connection attempts and improve socket cleanup
**Motivations:** - Too many SSH connection attempts were being made during deployment - ControlMaster socket cleanup was not aggressive enough - Multiple SSH calls at step 5 created excessive connection attempts **Root causes:** - ControlMaster socket could remain but be invalid, causing SSH to disable multiplexing - Each ssh_exec had up to 3 retries, and step 5 made 4-5 ssh_exec calls - Socket cleanup was not forceful enough to remove invalid sockets - Complex retry logic at step 5 created unnecessary SSH calls **Correctifs:** - Improved cleanup_dead_ssh() to forcefully remove socket and wait for proper closure - Reduced max retries in ssh_exec from 3 to 2 - Simplified step 5 logic to reduce SSH calls from 4-5 to 2 (one check, one init if needed) - Combined Git initialization commands into single SSH call to reduce connections - Added sleep after socket cleanup to ensure proper closure **Evolutions:** - More efficient SSH connection management - Reduced deployment time by minimizing connection attempts **Pages affectées:** - deploy.sh: Improved cleanup_dead_ssh(), reduced retries, simplified step 5 logic
This commit is contained in:
parent
20032c00ae
commit
7cbb57f8c9
39
deploy.sh
39
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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user