###Gitlab: creazione branch develop se assente### #Questo script passa in rassegna tutti i progetti esistenti sul gitlab aziendale e per ognuno controlla se esiste il branch develop. Se non esiste lo crea. #Necessario per l'esecuzione dello script che crea i tag perchè tali tag vengono creati sul branch develop. #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 $projectCount = 1 #numero massimo di progetti da analizzare $projectNumber = 200 #nome file di log $logFile = "GitlabDevelopCreation.log" #creazione folder di Log se non già esistente if (Test-Path $logFolder) { } else { New-Item $logFolder -ItemType Directory } #chiedo all'utente il project ID su cui lavorare #$projectCount = Read-Host -Prompt 'Project ID per eseguire lo script: ' #chiedo all'utente quante volte devo ciclare sui project ID #$projectNumber = Read-Host -Prompt 'Contatore dei Project ID su cui lavorare: ' #scrivo intestazione e inizio analisi WriteLogOutput $logFile 0 "--------------------" Switch ($logLevel) { 0 { WriteLogOutput $logFile 0 "LOG SINTETICO GITLAB DEVELOP CREATION" } 1 { WriteLogOutput $logFile 0 "LOG ERRORI GITLAB DEVELOP CREATION" } 2 { WriteLogOutput $logFile 0 "LOG FULL GITLAB DEVELOP CREATION" } 3 { WriteLogOutput $logFile 0 "LOG AMPOLLOSO GITLAB DEVELOP CREATION" } } WriteLogOutput $logFile 0 "" WriteLogOutput $logFile 0 "Percorso log: $logFolder" WriteLogOutput $logFile 0 "" WriteLogOutput $logFile 0 "Inizio Esecuzione Script: $startTime" #ciclo principale do/while che cicla da 1 a N projectNumber do { #compongo chiamata api per lavorare sui branch $branchUrl = "https://gitlab.steamware.net/api/v4/projects/" + $projectCount + "/repository/branches" try { $branchesResponse = Invoke-WebRequest -URI $branchUrl -Method GET -Headers $gitlabHead -ContentType "application/json" -UseBasicParsing #controllo se tra i branch esistenti non c'è develop, in tal caso procedo alla creazione WriteLogOutput $logFile 1 "" WriteLogOutput $logFile 1 "--------------------" WriteLogOutput $logFile 1 "**PROGETTO $projectCount**" #controllo se tra i branch esistenti c'è master if ($branchesResponse.Content -imatch '{"name":"master",') { #scrivo il body della chiamata con il nome del branch da creare e il ref di partenza $branchBody = @{ branch = "develop"; ref = "master"; } } #controllo se tra i branch esistenti c'è main elseif ($branchesResponse.Content -imatch '{"name":"main",') { #scrivo il body della chiamata con il nome del branch da creare e il ref di partenza $branchBody = @{ branch = "develop"; ref = "main"; } } # converto body in json $branchJSON = $branchBody | ConvertTo-Json #webrequest che effettua la creazione del branch. Serve url, head per auth, body. specificare metodo POST $gitResponse = Invoke-WebRequest -URI $branchUrl -Method POST -Headers $gitlabHead -ContentType "application/json" -UseBasicParsing -Body $branchJSON #parsing della risposta api convertita da json $parsedResponse = $gitResponse.Content | ConvertFrom-Json WriteLogOutput $logFile 1 "Branch Esistente: $($branchBody.ref) - Creato Branch: $($parsedResponse.name)" } #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) } $projectCount = $projectCount + 1 } #fine ciclo principale while ($projectCount -le $projectNumber) # 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 "Fine Esecuzione Script: $endTime" WriteLogOutput $logFile 0 "" WriteLogOutput $logFile 0 "Durata Esecuzione Script: $durataScript secondi" WriteLogOutput $logFile 0 ""