L'uso delle pipeline di Azure DevOps (o GitHub) è molto comodo in qualsiasi scenario in cui vogliamo automatizzare dei processi. Internamente in azienda, per esempio, si potrebbe voler automatizzare la creazione dei progetti o di repository preconfigurati in Azure DevOps, anche a persone che non hanno l'accesso come organizational admin, semplicemente costruendo una interfaccia web che funzioni da proxy. Così facendo, una pipeline eseguirà in modo controllato e con tutti i permessi del caso tutte le operazioni di setup iniziale e l'utente richiedente non avrà alcuna visibilità, se non del progetto finale creato.
Per realizzare questo scenario, possiamo fare uso delle REST API di Azure DevOps, oppure, direttamente del client che viene fornito in diversi flavor (per .NET, JavaScript, etc.).
In prima istanza abbiamo bisogno di creare una connessione verso Azure DevOps. Per farlo è necessario munirci di un Personal Access Token (PAT) che verrà creato da Azure, all'interno del proprio profilo (per questo è consigliato fare un account di servizio).
private VssConnection _connection; public VssConnection Connection { get { if (_connection == null) { var pat = "{get-this-from-azure-devops}"; var creds = new VssBasicCredential(string.Empty, pat); _connection = new VssConnection(new Uri($"https://dev.azure.com/{organization}"), creds); } return _connection; } }
Ottenute le credenziali, possiamo quindi ottenere il client che si occupa di gestire le pipeline in Azure DevOps.
var buildClient = await Connection.GetClientAsync<BuildHttpClient>();
E, infine, possiamo recuperare la timeline di esecuzione della pipeline, dato il suo identificativo e il progetto in cui è contenuta (sia per le pipeline YAML che per quelle classiche):
var timeline = await buildClient.GetBuildTimelineAsync("{project}", id);
A questo punto abbiamo a disposizione tutta una serie di record che rappresentano tutti i passaggi della pipeline. Possiamo quindi farne delle query per, ad esempio, capire quali sono i job completati:
var completedJobs = timeline.Records .Where(x => x.RecordType == "Phase" && x.State == TimelineRecordState.Completed) .OrderBy(x => x.FinishTime);
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Ottimizzare le performance usando Span<T> e il metodo Split
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Configurare lo startup di applicazioni server e client con .NET Aspire
Creare una libreria CSS universale: Immagini
Ottenere un token di accesso per una GitHub App
Recuperare l'ultima versione di una release di GitHub
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
Gestione dei nomi con le regole @layer in CSS
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
I più letti di oggi
- Eseguire query in contemporanea con EF
- Fissare una versione dell'agent nelle pipeline di Azure DevOps
- .NET Aspire per applicazioni distribuite
- Utilizzare Locust con Azure Load Testing
- Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
- Repaint, Reflow e Compositing: Come Funziona il Rendering nel Browser
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!