Le pipeline che più spesso ci troviamo ad eseguire sono quelle che coinvolgono il processo di continuous integration dei progetti. Questo significa che eseguiamo gli step di restore delle dipendenze (indipendentemente che esse siano di NuGet, npm o altro) e quindi ci troveremo a "compilare" il progetto di riferimento (tramite msbuild o npm build), potenzialmente decine (o centinaia) di volte al giorno, poichè le pipeline verranno triggerate ad ogni commit/push sul repository, in base alla configurazione scelta.
E' molto importante, quindi, prevedere un meccanismo di versioning. Questo non solo aiuterà a produrre degli artefatti che potranno quindi essere distribuiti automaticamente con un numero di versione che viene incrementato automaticamente ma, in aggiunta, quando ci sono tante build in esecuzione aumenta anche la leggibilità dei log.
Il versioning è un tema piuttosto complesso e che andrebbe affrontato nello specifico in ogni progetto: di fatti, c'è chi preferisce avere estensioni dei progetti in Visual Studio, piuttosto che un sistema centrale lato server che calcola il numero automaticamente all'esecuzione delle pipeline stesse. A prescindere da pro/contro di ciascuna soluzione, affrontiamo oggi la seconda opzione. Per questo tema ci può venire in aiuto GitVersion, una estensione gratuita di Azure DevOps e distribuita anche in modo open source (alla fine è un semplice eseguibile da installare sulla macchina che contiene il repository) che, semplicemente leggendo lo stato del repository corrente, è in grado di calcolare un numero di versione automaticamente secondo determinate convenzioni:

In base al nome del branch, dei tag, del numero di commit fatti e del contesto (es. Pull Request piuttosto di CI), questo sistema calcolerà un numero di versione appropriato e lo esporrà come variabile d'ambiente a livello di macchina:
# Install GitVersion using GitTools extension - task: gitversion/setup@0 displayName: Install GitVersion inputs: versionSpec: '5.x' # Detects the version using GitTools - task: gitversion/execute@0 displayName: Detect version timeoutInMinutes: 2 continueOnError: true
A livello di pipeline, come possiamo vedere, è piuttosto semplice includere gli step necessari al calcolo del numero di versione. E' bene specificare che, tuttavia, il sistema in ambienti molto complessi ha bisogno di una configurazione ad-hoc (che possiamo passare in input o tramite un file GitVersion.yml), altrimenti potrebbe andare in un loop infinito, per questo è sempre bene prevedere comunque un fallback valido per fare in modo che la pipeline possa procedere senza problemi.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Calcolare automaticamente un numero di versione di un repository in una GitHub Action
Commentare una issue associata ad una pull request tramite un workflow di GitHub
Creare una timeline da una pipeline di Azure DevOps
Ottimizzare il json generato dalla serializzazione con System.Text.Json eliminando i valori non necessari
Terraform e Kubernetes
Produttività con ASP.NET Core 6
Impostare l'hostname di un'immagine docker per rendere il container da altri container in Visual Studio
Produrre un inventario automatico di Azure Storage
.NET per sviluppatori AWS
Velocizzare l'installazione delle dipendenze in un workflow di GitHub
Tenere sotto controllo la working directory di un self-hosted agent di Azure DevOps
I più letti di oggi
- Semplificare la gestione delle eccezioni per parametri non nullable in C#
- devConf 2022 - Online
- Impostare un default custom per i metodi LINQ che tornano il valore di default
- Impostare il tema light o dark utilizzando i CSS
- Utilizzare il metodo reduce in JavaScript
- Gestire eventi di serializzazione e deserializzazione in .NET con System.Text.Json
- Recuperare la data di creazione e ultima modifica di un record con Entity Framework Core e le temporal table di SQL Server
- Usare domini personalizzati con Azure Container App
- Utilizzare l'API del browser fetch