Repository navigation
Expand file tree
/
Copy pathdeployToProd.ps1
More file actions
121 lines (93 loc) · 3.13 KB
/
Copy pathdeployToProd.ps1
File metadata and controls
121 lines (93 loc) · 3.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# Enregistrer ce fichier en "UTF-8 with BOM" pour que les accents fonctionnent dans le terminal
$ConfigFile = Join-Path $PSScriptRoot "deploy.config.ps1"
if (-not (Test-Path $ConfigFile)) {
Write-Error "Fichier de configuration introuvable : $ConfigFile"
Write-Host "Copiez deploy.config.example.ps1 vers deploy.config.ps1 puis renseignez la destination."
exit 1
}
. $ConfigFile
if ([string]::IsNullOrWhiteSpace($Destination)) {
Write-Error "La variable `$Destination n'est pas définie dans $ConfigFile"
exit 1
}
$Source = Join-Path $PSScriptRoot "dist"
$BackupRoot = Join-Path $Destination "backups"
$Timestamp = Get-Date -Format "ddMMyyyyHHmm"
Write-Host ""
Write-Host "ATTENTION : ce script va effectuer une synchronisation miroir vers la prod."
Write-Host "Les fichiers présents uniquement dans la destination seront supprimés."
Write-Host "L'état actuel sera perdu."
Write-Host "Une sauvegarde des fichiers de config sera effectuée dans $BackupRoot."
Write-Host ""
$Confirmation = Read-Host "Êtes-vous sûr ? Tapez 'y' pour continuer"
if ($Confirmation.Trim().ToLower() -ne "y") {
Write-Host "Opération annulée."
exit 0
}
# ------------------------------------------------------------
# Vérifications
# ------------------------------------------------------------
if (-not (Test-Path $Source)) {
Write-Error "Le dossier source n'existe pas : $Source"
exit 1
}
if (-not (Test-Path $Destination)) {
Write-Error "Le dossier destination n'existe pas : $Destination"
exit 1
}
New-Item -ItemType Directory -Path $BackupRoot -Force | Out-Null
# ------------------------------------------------------------
# Sauvegarde des dossiers config et localisation
# ------------------------------------------------------------
$FoldersToBackup = @(
"config",
"localisation"
)
foreach ($Folder in $FoldersToBackup) {
$BackupSource = Join-Path $Destination $Folder
$BackupDestination = Join-Path $BackupRoot "$Folder - $Timestamp"
if (-not (Test-Path $BackupSource)) {
Write-Error "Le dossier à sauvegarder n'existe pas : $BackupSource"
exit 1
}
Write-Host ""
Write-Host "Sauvegarde de $Folder vers :"
Write-Host " $BackupDestination"
robocopy `
$BackupSource `
$BackupDestination `
/E `
/R:1 `
/W:1 `
/XJ `
/NP
if ($LASTEXITCODE -ge 8) {
Write-Error "Échec de la sauvegarde de '$Folder'. Robocopy : $LASTEXITCODE"
exit $LASTEXITCODE
}
}
# ------------------------------------------------------------
# Synchronisation miroir
# ------------------------------------------------------------
Write-Host ""
Write-Host "Synchronisation miroir..."
Write-Host "$Source"
Write-Host " -> $Destination"
robocopy `
$Source `
$Destination `
/MIR `
/XD $BackupRoot `
/XF "thumbs.db" "desktop.ini" `
/R:1 `
/W:1 `
/XJ `
/NP
$RoboCopyExitCode = $LASTEXITCODE
if ($RoboCopyExitCode -ge 8) {
Write-Error "Erreur pendant la synchronisation. Robocopy : $RoboCopyExitCode"
exit $RoboCopyExitCode
}
Write-Host ""
Write-Host "Synchronisation terminée avec succès."
exit 0