100 lines
4.5 KiB
PowerShell
100 lines
4.5 KiB
PowerShell
###Gitlab: controllo i branch protetti (e eventualmente toglie la protezione) dai gitlab nembro e azzano###
|
|
|
|
#Questo script passa in rassegna tutti i progetti esistenti sui gitlab satellite nembro e azzano per verificare la presenza di branch protetti che potrebbero impedire il corretto funzionamento dei mirror verso tali repo. Se necessario questo script può anche rimuovere la protezione da tali branch.
|
|
|
|
#importo file contenente configurazioni
|
|
. .\ApiGit\ApiGitResources\ApiScriptsConfig.ps1
|
|
#importo file contenente funzioni
|
|
. .\ApiGit\ApiGitResources\ApiScriptsFunctions.ps1
|
|
|
|
#rilevo time per log inizio analisi
|
|
$startTime = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
|
|
# avvio stopwatch
|
|
$mainStopWatch = [system.diagnostics.stopwatch]::StartNew()
|
|
#contatore ciclo do while
|
|
$startProj = 1
|
|
#numero massimo di progetti da analizzare
|
|
$endProj = 300
|
|
#conteggio progetti trovati
|
|
$existingProjects = 0
|
|
#conteggio progetti trovati
|
|
$protectedProjects = 0
|
|
#abilita o disabilita la cancellazione della protezione (1=cancella, 0=toca negot)
|
|
$deleteProtection = 1
|
|
#nome file di log
|
|
$logFile = "GitlabProtectedBranches.log"
|
|
#nome file old log
|
|
$oldLogFile = "GitlabProtectedBranches.old"
|
|
|
|
#creazione folder di Log se non già esistente
|
|
CheckLogFolder
|
|
|
|
#rotazione vecchio logFile da .log a .old se esiste
|
|
RotateOldLog
|
|
|
|
#scrivo intestazione e inizio analisi
|
|
WriteLogOutput $logFile 0 "--------------------"
|
|
Switch ($logLevel) {
|
|
0 { WriteLogOutput $logFile 0 "LOG SINTETICO GITLAB PROTECTED_BRANCHES" }
|
|
1 { WriteLogOutput $logFile 0 "LOG ERRORI GITLAB PROTECTED_BRANCHES" }
|
|
2 { WriteLogOutput $logFile 0 "LOG FULL GITLAB PROTECTED_BRANCHES" }
|
|
3 { WriteLogOutput $logFile 0 "LOG AMPOLLOSO PROTECTED_BRANCHES" }
|
|
}
|
|
WriteLogOutput $logFile 0 ""
|
|
WriteLogOutput $logFile 0 "Percorso log: $logFolder"
|
|
WriteLogOutput $logFile 0 ""
|
|
WriteLogOutput $logFile 0 "Inizio Esecuzione Script: $startTime"
|
|
|
|
$gitlabIstance = $destinationAzzano
|
|
$head = $azzanoHead
|
|
#ciclo principale for che cicla da startProj a endProj
|
|
for ($projectCount = $startProj; $projectCount -le $endProj; $projectCount++) {
|
|
#chiamata api che restituisce informazioni sullo stato dei mirror
|
|
$callUrl = "https://" + $gitlabIstance + "/api/v4/projects/" + $projectCount + "/protected_branches"
|
|
try {
|
|
#parsing della risposta api convertita da json
|
|
$Response = Invoke-WebRequest -URI $callUrl -Headers $head -ContentType "application/json" -UseBasicParsing
|
|
$parsedResponse = $Response.Content | ConvertFrom-Json
|
|
#scrivo il numero del progetto
|
|
WriteLogOutput $logFile 1 ""
|
|
WriteLogOutput $logFile 1 "--------------------"
|
|
WriteLogOutput $logFile 1 "**PROGETTO $projectCount $gitlabIstance**"
|
|
foreach ($item in $parsedResponse) {
|
|
WriteLogOutput $logFile 1 "Protected Branch Name: $($item.name) - Allow Force Push: $($item.allow_force_push)"
|
|
$protectedProjects = $protectedProjects + 1
|
|
if ($deleteProtection -eq 1) {
|
|
#nuovo URL x delete
|
|
$callUrlDelete = "https://" + $gitlabIstance + "/api/v4/projects/" + $projectCount + "/protected_branches/" + $item.name
|
|
#chiamo method DELETE
|
|
Invoke-WebRequest -Method Delete -URI $callUrlDelete -Headers $head -ContentType "application/json" -UseBasicParsing
|
|
}
|
|
}
|
|
$existingProjects = $existingProjects + 1
|
|
}
|
|
#scrivo se trovo un errore durante il try/catch
|
|
catch {
|
|
$parsedError = $_ | ConvertFrom-Json
|
|
WriteLogOutput $logFile 3 ""
|
|
WriteLogOutput $logFile 3 "--------------------"
|
|
WriteLogOutput $logFile 3 "**ERRORE NEL PROGETTO $projectCount**"
|
|
WriteLogOutput $logFile 3 $($parsedError.message)
|
|
}
|
|
#fine ciclo dei progetti
|
|
}
|
|
# fermo stopwatch e calcolo durata script
|
|
$mainStopWatch.Stop()
|
|
$durataScript = $mainStopWatch.Elapsed.TotalSeconds
|
|
|
|
#rilevo time per log fine analisi
|
|
$endTime = (Get-Date).toString("yyyy/MM/dd HH:mm:ss")
|
|
|
|
#scrivo a video le statistiche
|
|
WriteLogOutput $logFile 0 ""
|
|
WriteLogOutput $logFile 0 "PROGETTI ANALIZZATI: $existingProjects"
|
|
WriteLogOutput $logFile 0 ""
|
|
WriteLogOutput $logFile 0 "PROGETTI CON BRANCH PROTETTI: $protectedProjects"
|
|
WriteLogOutput $logFile 0 ""
|
|
WriteLogOutput $logFile 0 "Fine Esecuzione Script: $endTime"
|
|
WriteLogOutput $logFile 0 ""
|
|
WriteLogOutput $logFile 0 "Durata Esecuzione Script: $durataScript secondi"
|
|
WriteLogOutput $logFile 0 "" |