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
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Cancellare una run di un workflow di GitHub
Gestione dei nomi con le regole @layer in CSS
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
Rendere le variabili read-only in una pipeline di Azure DevOps
Creare una custom property in GitHub
Supportare la sessione affinity di Azure App Service con Application Gateway
Fornire parametri ad un Web component HTML
Introduzione alle Container Queries