Backup Automatizzati con SubVersion

Se utilizziamo SubVersion come sistema di controllo versione per i nostri sorgenti non c’è nulla di più comodo di una procedura automatizzata richiamabile con un click che esegua il backup di tutto il Repository, lo comprima e lo cataloghi secondo lo nostre esigenze.

Vediamo come creare in pochi secondi un file Batch che faccia tutto questo:

Apriamo il Blocco Notes e inseriamo le seguenti righe (sostituendo i percorsi con quelli del proprio computer), salviamo infine il file con l’estensione .bat

@echo off
echo Creazione copia di backup del Repository...
svnadmin hotcopy "X:/Repository" "C:/Users/UserName/Documenti/BackupSVN" --clean-logs
echo Compressione backup...
"C:\Program Files\WinRAR\WinRAR.exe" A -t -m5 -r -ag -rr5p -ep1 "C:/Users/UserName/Documenti/BackupSVNcompresso" "C:/Users/UserName/Documenti/BackupSVN/"
echo Eliminazione directory temporanea...
rmdir /s /q "C:/Users/UserName/Documenti/BackupSVN"
echo Backup avvenuto con successo
pause

Analizziamo il nostro file Batch:

Prima di tutto disabilitiamo la sintassi dei comandi in modo da visualizzare solo l’ouput effettivo del nostro batch (comando @echo off) e stampiamo a video l’avanzamento del processo con echo stringa da visualizzare

Creiamo una copia temporanea del Repository tramite svnadmin e l’opzione hotcopy (per chi non lo avesse installato nel proprio sistema può scaricarlo da SlikSvn).

UPDATE: Aggiungendo " --clean-logs" eviteremo di inserire i log ridondanti, salvando così spazio. L'uso di hotcopy rispetto alla semplice copia della cartella garantisce che eventuali processi in esecuzione non corrompano il backup accedendo al repository.

Comprimiamo la cartella, assegnando al file compresso un nome incrementale (es. BackupSVNcompressoAAAAMMGGOOMMSS).

Per la compressione sfruttiamo le funzionalità a linea di comando di WinRar, i parametri passati permettono di:

- aggiungere file ad un archivio (opzione A)

- verificare i file appena archiviati (-t)

- personalizzare il livello di compressione (-m5 = massimo)

- includere ricorsivamente le sottocartelle (-r)

- aggiungere al nome dell’archivio una sequenza legata alla data corrente (-ag)

- aggiungere le informazioni utili (5%) per un recupero a seguito di danneggiamento dell'archivio (-rr5p)

- non archiviare il percorso inserito nella linea di comando (-ep1)

I parametri passabili a WinRar sono veramente tanti, per una lista completa consultare la Guida installata col programma.

ATTENZIONE: Su sistemi operativi in lingua diversa dall'inglese potrebbe essere necessario sostituire "Program Files" con la cartella dei programmi del proprio sistema (es. "Programmi" per il sistema operativo Windows XP in italiano) o comunque indicare dove risiede l'eseguibile WinRAR.exe.

Per finire eliminiamo la cartella creata in precedenza (di cui abbiamo creato una copia in formato compresso) e lanciamo il comando pause, permetterà di vedere l’output del file batch anche dopo l’esecuzione. Basterà poi premere un tasto per chiudere la finestra.

BatchBackupRepository

Backup eseguito!

Scarica il file batch

Print | posted on mercoledì 24 dicembre 2008 14:54

Comments on this post

# re: Backup Automatizzati con SubVersion

Requesting Gravatar...
Ciao Mauro, il problema nel backup senza svnadmin hotcopy è il rischio di corruzione se un altro processo cerca di accedere al repository.
Left by Leonardo on dic 28, 2008 2:14

# re: Backup Automatizzati con SubVersion

Requesting Gravatar...
Ciao Leonardo sono sempre Mauro, visto che ero senza far nulla ho rifatto il tuo script in powershell con la variante che faccio il backup di tutte le cartelle che sono sotto il repository.

ciao Mauro
*************************************
clear
#recupero tutti gli elementi del repository
$repository = Get-ChildItem c:\Repositories
#impostazione variabili
$bkpBase ="C:\BackupSVN\"
$bkpCompresso = "C:\BackupSVNcompresso\"
$WinRar = "C:\Program Files (x86)\WinRAR\WinRAR.exe"
# loop per tutti gli elementi
foreach($item in $repository)
{

#per ogni elemento verifico se è una cartella
if($item.PSIsContainer){

$dir = $bkpBase+$item.Name
#ricreo la folder
New-Item $dir –type Directory -force
echo Creazione copia di backup del Repository...
svnadmin hotcopy $item.FullName $dir
$dirCompresso = $bkpCompresso+$item.Name
echo Compressione backup...
&$WinRar A -t -m5 -r -rr5p -ep1 $dirCompresso $dir | out-null
echo Eliminazione directory temporanea...
if(Test-Path $dir){
Remove-Item $dir -Force -Recurse
}

}
}
Left by sundna on gen 06, 2009 6:08

# Live Mesh:

Requesting Gravatar...
Live Mesh:
Left by Il Blog di Nicol on gen 19, 2009 12:44

Your comment:

 (will show your gravatar)
 
Please add 4 and 2 and type the answer here: