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
Usare le collection expression per inizializzare una lista di oggetti in C#
Disabilitare automaticamente un workflow di GitHub
Paginare i risultati con QuickGrid in Blazor
Migliorare la sicurezza dei prompt con Azure AI Studio
Utilizzare gRPC su App Service di Azure
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Gestire domini wildcard in Azure Container Apps
Usare una container image come runner di GitHub Actions
Triggerare una pipeline su un altro repository di Azure DevOps
Generare token per autenicarsi sulle API di GitHub
Evitare (o ridurre) il repo-jacking sulle GitHub Actions
I più letti di oggi
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Creare una libreria CSS universale: Cards
- Eseguire script pre e post esecuzione di un workflow di GitHub