facebook

Blog

Resta aggiornato

Vediamo come automatizzare la creazione di pacchetti NuGet utilizzando Azure Pipelines della piattaforma Azure DevOps
Creare pacchetti NuGet con Azure Pipelines
mercoledì 11 Settembre 2019

Automatizzare la creazione dei pacchetti Nuget

Negli articoli precedenti, abbiamo visto come creare dei pacchetti nuget per il nostro software e come condividerli con gli altri membri del team usando i feed di Azure Artifacts. Inoltre, abbiamo visto alcune tecniche che possono aiutarci in fase di versionamento dei nostri pacchetti. In quest’ultimo articolo, vedremo in che modo automatizzare l’intero processo di creazione e versionamento dei pacchetti Nuget usando Azure Pipelines.

Cos’è Azure Pipelines?

Azure Pipelines ci consente di creare delle pipeline di release per i nostri software. Ci sono alcuni punti di forza che rendono Azure Pipelines un ottimo strumento:

  • Cross-platform;
  • Possibilità di compilare diversi linguaggi e per diverse piattaforme (web, mobile, etc etc);
  • Host degli agenti di compilazione on-premise o cloud;
  • Possibilità di usare YAML per la creazione di pipeline;
  • Ottima estensibilità grazie ad un marketplace per le estensioni;
  • Gratuito per freelancer o team di piccole dimensioni (maggiori info qui);

È importante sapere che in Azure Pipelines esiste una netta distinzione tra il processo di build e quello di release: il primo ci consente di generare degli artefatti, il secondo invece distribuisce gli stessi artefatti su diversi ambienti (o stage).
Inoltre, un aspetto che mi piace sempre enfatizzare di Azure Pipelines è la sua semplicità d’uso: l’esperienza di creazione o il feedback sullo stato di una pipeline è sempre molto chiaro e di facile comprensione. Vi ricordo, inoltre, che Azure Pipelines fa parte di una suite di prodotti il cui nome è Azure DevOps.

Creare una build per i nostri pacchetti Nuget

Siamo quindi giunti al momento della creazione dei pacchetti Nuget. Ci spostiamo nella sezione Azure Pipelines del nostro account Azure DevOps e creiamo una nuova pipeline con il tasto “Nuova” e poi “Build Pipeline”.
Nel wizard di creazione, possiamo fornire sia un repository da cui attingere il codice sorgente e che consente di creare una pipeline usando YAML, sia usare l’editor classico, in cui si compone una build tramite l’uso di singoli task. Per semplicità d’uso, vi illustro come utilizzare la seconda opzione.

Tipologie di pipeline disponibili

Dopo aver selezionato il repository, selezioniamo la tecnologia di cui abbiamo bisogno: scegliamo “.NET Desktop” come template.

Tipologie di template per build

Dobbiamo poi fornire alcune informazioni (vedi figura sotto):

  1. Il nome della nostra build
  2. La tipologia dell’agent da utilizzare (hosted o privato);
  3. La tipologia di agente che occorre per poter compilare il nostro progetto in base alla piattaforma di sviluppo utilizzata (es. .NET Framework, Node.js, etc etc).
Un esempio di definizione build

Adesso modifichiamo il nostro template di build per generare il pacchetto Nuget da caricare sul Feed. Rimuoviamo prima il penultimo task “Copy Files to: $(build.artifactstagingdirectory)” e sostituiamolo con un nuovo task di tipo “Nuget” tramite il tasto “+” in alto. Una volta aggiunto, indichiamo nel lato destro della finestra:

  1. “Pack” come comando da eseguire;
  2. il path del progetto (o progetti) o anche il nuspec che abbiamo visto come creare in uno dei precedenti articoli. Se guardiamo l’immagine sotto, grazie all’uso di un pattern, scegliamo di creare i pacchetti Nuget per tutti i progetti presenti all’interno della nostra soluzione.
  3. di aggiungere i progetti referenziati usando il flag “Include referenced projects”.
La build modificata per creare i pacchetti Nuget

Eseguiamo la build con il tasto in alto “Queue” e, al suo termine, verifichiamo tramite il pulsante “Artifacts” nella pagina di riepilogo l’insieme dei pacchetti generati.

Versionare i pacchetti Nuget

Siamo pronti per poter aggiungere, tramite l’uso di GitVersion, i numeri di versione ai nostri pacchetti. Infatti, è possibile, grazie all’uso di una estensione, integrare nella nostra build la generazione dei numeri in piena ottica SemVer. Per prima cosa, aggiungiamo un task cliccando come sempre sul tasto “+” in alto e cerchiamo nella casella di ricerca “GitVersion”. Se questo task non è già presente nel nostro account, possiamo scaricarlo dal marketplace seguendo il wizard (a questo link trovate tutte le informazioni in merito).

Aggiunta di GitVersion alla build

Selezioniamo il task GitVersion e impostiamo i seguenti parametri:

  • il path al GitVersion.yml (creato nel precedente articolo);
  • abilitare il flag “Update AssemblyInfo files”.
Configurazione di GitVersion

Inoltre, nel file GitVersion.yml sarà necessario aggiungere la seguente riga, che imposta il formato di versionamento da utilizzare:

assembly-informational-format: '{NugetVersion}'

In questo modo, i nostri pacchetti Nuget saranno versionati con il formato corretto nell’AssemblyInformationalVersion, di cui abbiamo parlato nello scorso articolo.

Caricare i pacchetti generati sul feed

Una volta terminata la creazione del pacchetto Nuget, siamo pronti per caricare il nupkg sul nostro feed di Azure Artifacts. A tal proposito, creiamo una release che parte subito al termine della build e che ha, come unico scopo, quello di recuperare i nupkg e caricarli sul feed. Nella pagina di riepilogo della build, selezioniamo il pulsante “Release” per creare una nuova pipeline di deploy.

Il tasto di creazione di una nuova release

In questo caso, non selezioniamo alcun template già pronto come per la build, ma utilizziamo un template vuoto tramite il pulsante “Empty Job”. Ci ritroviamo nella seguente situazione:

Impostazioni di base di una release

I prossimi step sono:

  1. dare il nome allo stage “Nuget Feed”;
  2. impostare un task all’interno dello stage che consenta l’upload del nostro pacchetto Nuget.

Per il punto due, possiamo cliccare sul link “1 job, 0 task” per avere il dettaglio degli step presenti nel processo di deploy. Si apre una nuova finestra, molto simile a quella che abbiamo visto per la build, che ci consente di utilizzare degli step (o task), per definire il processo di rilascio. Anche in questo caso, ci sarà un agente (hosted o privato), che eseguirà per noi il processo di deploy.
Andiamo quindi ad aggiungere, sempre con il tasto “+”, un nuovo task di tipo “Nuget” che prepariamo come la figura seguente:

I parametri per il task push di Nuget

Impostiamo prima il comando “push” (1) da eseguire tramite il task. Questo comando andrà a recuperare tutti i file nupkg con il pattern “/**/*.nupkg” (2) presenti nell’artefatto della build e li caricherà sul feed selezionato nel campo “Target feed” (3). Infine, selezioniamo il flag “Allow duplicates to be skipped” (4), per evitare che la release vada in errore nel caso in cui effettuiamo il deploy di una versione di pacchetto già presente.
Siamo pronti a lanciare la nostra release tramite il pulsante in alto “Create Release” e verificare che il pacchetto versionato sia caricato correttamente sul feed.

Il risultato di una release
Un pacchetto caricato sul nostro feed Nuget

Buon versionamento a tutti!