###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++ 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++ } #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 ""