Quando abbiamo a che fare con i pacchetti di NuGet, di npm o altro all'interno di Azure DevOps, quasi sicuramente ci ritroviamo ad utilizzare anche la parte dedicata ad Azure Artifacts. Questa sezione di Azure DevOps ci consente di creare delle viste, per evidenziare lo stato in cui si trovano i nostri pacchetti che, magari, abbiamo costruito all'interno di una qualche pipeline: ad esempio, potrebbe essere utile avere una vista per tenere i pacchetti in versione alpha, una per tenere i pacchetti in prerelease e, infine, una terza vista per tenere solamente le dipendenze che vogliamo rilasciare in maniera stabile.
Azure DevOps ci consente di promuovere i pacchetti tra una vista e l'altra tramite il portale. Tuttavia, probabilmente vogliamo questo comportamento integrato con le pipeline che lo hanno generato e caricato dentro Azure Artifacts stesso, pertanto ci serve un sistema per automatizzare il processo. Grazie all'estensione Azure DevOps, possiamo fare uso delle sue REST API per chiamare un endpoint dedicato alla gestione delle dipendenze:
$feedView = "my-feed-view" $json = @{ "packages"= @( @{ id= 'PackageName' version= 'PackageVersion' } ) "operation" = "promote" "data" = @{ viewId= $feedView } } $body = ConvertTo-Json -InputObject $json $uri = 'https://pkgs.dev.azure.com/$org/$project/_apis/packaging/feeds/$feedName/nuget/packagesbatch?api-version=5.0-preview.1' Invoke-RestMethod $uri -Method POST -Body $body -Headers @{Authorization=("Bearer {0}" -f $env:SYSTEM_ACCESSTOKEN); "content-type" = "application/json"} Write-Host "##vso[task.complete result=Succeeded;]Promote succeeded"
Questo endpoint può lavorare i pacchetti anche a batch, così da poter risparmiare sul numero di request in caso in cui dobbiamo promuovere più pacchetti contemporaneamente, e accetta in ingresso un payload in cui dobbiamo solamente specificare il nome del package e la sua versione, oltre che al tipo di operazione che vogliamo fare (tra le altre una remove) e verso quale feed (o view).
Questa chiamata richiede l'autenticazione verso Azure DevOps e, questo, possiamo ottenerlo sfruttando l'access token generato dalla pipeline, ovvero SYSTEM_ACCESSTOKEN. Dalla pipeline, possiamo invocare questo script di PowerShell (ma lo stesso può avvenire anche per Bash, PowerShell Core etc.), tramite questo script:
- pwsh: | # Lo script precedente qui, oppure referenziato tramite file path displayName: Promote NuGet packages env: SYSTEM_ACCESSTOKEN: $(SYSTEM.ACCESSTOKEN)
E' bene ricordare che, sebbene sia possibile promuovere un pacchetto, non è possibile effettuare l'operazione contraria e che, il numero di versione, deve essere univoco al momento dell'ingestion nel sistema di Azure Artifacts, altrimenti verrà generato un errore 409 (Conflict) in risposta alla request sull'API.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Code scanning e advanced security con Azure DevOps
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Applicare un filtro per recuperare alcune issue di GitHub
Sostituire la GitHub Action di login su private registry
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Miglioramenti nelle performance di Angular 16
.NET Conference Italia 2024
Sfruttare MQTT in cloud e in edge con Azure Event Grid
Creare alias per tipi generici e tuple in C#