Retour au blog
juin 2019·1 min de lectureTraduit par IA
Langue:DeutschEnglishFrançaisÖsterreichischKlingonian Version originale: Deutsch

Autopush - Téléverser simplement les fichiers modifiés

#auf-server-hochladen#auto-upload#automatisch-hochladen#autopush-to-server#autoupload#dateien-aktualisieren#hochladen#upload#upload-to-server

Pour simplifier mon flux de travail de web design et de développement web, je me suis écrit un petit script Autopush. Le script surveille un dossier précis et tous ses sous-dossiers, et téléverse via SCP les fichiers modifiés vers un serveur distant. Si vous aimez développer en local mais voulez pousser directement les modifications vers votre serveur sans les téléverser sans cesse à la main, ce script vous plaira sûrement :) Comme toujours : aucune responsabilité pour d'éventuels dommages.

Important :

  1. Vous devez vous authentifier auprès du serveur par clé SSH, sinon le script Bash doit être légèrement adapté.
  2. fswatch doit être installé.

Autopush fonctionne ainsi : vous créez un fichier de configuration Autopush au format ini, passé en premier paramètre au script Bash. Le fichier Autopush est structuré ainsi :

  • remote_host= L'hôte vers lequel vous voulez pousser les fichiers. Peut être un domaine ou une IP. Pensez aux clés SSH.
  • remote_username= Le nom d'utilisateur avec lequel vous vous authentifiez sur le serveur.
  • remote_mapping= Le chemin sur lequel le mappage se fait. Les modifications de local_source sont téléversées relativement à remote_mapping.
  • local_source= Le chemin local à surveiller et à pousser.
  • exclude=source,_Server Fichiers à ne pas pousser, exclus de la surveillance.

Attention : les fichiers .DS_Store sont exclus par programme et n'ont pas besoin d'être indiqués explicitement.

Le dossier de local_source est surveillé par le script ; dès qu'un fichier y est modifié, il est envoyé au serveur via

scp local_file_path remote_username@remote_host:/remote_mapping/absolute_local_path

Le script Bash s'appelle simplement ainsi :

autopush.sh /Pfad/zur/Config.ini

Et voici le script complet :

#!/bin/sh
if [ $# -eq 1 ]; then
    CONFIGFILE=$1
    . $1
    echo "Autopushing '$local_source' now..."
    /usr/local/bin/fswatch -0 "$local_source" | xargs -0 -n 1 sh $0 0 $CONFIGFILE
elif [ $# -eq 2 ] && [ $2="--fullsync" ]; then
    CONFIGFILE=$1
    . $1
    echo "Fullsyncing '$local_source' now..."
    scp -r $local_source/* $remote_username@$remote_host:$remote_mapping
else
    CONFIGFILE=$2
    FILE=$3
    . $CONFIGFILE
    length_local_source=${#local_source}
    length_changed_file_absolute=${#FILE}
    length_changed_file_relative=$((0-length_local_source-length_changed_file_absolute))
    relative_path=${FILE:$length_local_source}
    donotpush=(${exclude//,/ })
    donotpush+=($CONFIGFILE)
    donotpush+=(".DS_Store")
    for i in "${donotpush[@]}"
    do
        if [[ $FILE == *$i* ]]; then
            echo "[STOP] DO NOT PUSH $FILE (MATCHES '$i')"
            exit
        fi
    done
    remote_target="$remote_mapping$relative_path"
    if [ -d "$FILE" ] || [ -f "$FILE" ]; then
        echo "[CHANGE] `date '+%Y-%m-%d %H:%M:%S'` $relative_path -> $remote_target";
        scp -r $FILE $remote_username@$remote_host:$remote_target
    else
        echo "[DELETE] rm -rf $remote_target";
        ssh $remote_username@$remote_host "rm -rf $remote_target"
    fi
fi
Plus récentUn MacBook flambant neuf qui s'éteint tout seulPlus ancienCentOS - L'essentiel du serveur