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
Migliorare la sicurezza dei prompt con Azure AI Studio
Creare una custom property in GitHub
Simulare Azure Cosmos DB in locale con Docker
Autenticazione di git tramite Microsoft Entra ID in Azure DevOps
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Il nuovo controllo Range di Blazor 9
Anonimizzare i dati sensibili nei log di Azure Front Door
Gestione dell'annidamento delle regole dei layer in CSS
Aggiornare a .NET 9 su Azure App Service
Garantire la provenienza e l'integrità degli artefatti prodotti su GitHub
Gestire la cancellazione di una richiesta in streaming da Blazor