Nel precedente script (https://www.aspitalia.com/script/1263/Creare-Pubblicare-Pacchetto-NuGet-.NET-Standard.aspx) abbiamo visto come creare e redere pubblico un pacchetto NuGet nella galleria "ufficiale" di nuget.org.
In questo script vedremo invece come inviare pacchetti NuGet ad un feed privato, ovvero un archivio riservato a noi e ai nostri collaboratori che ci permette di riutilizzare i nostri componenti in vari progetti aziendali. Ci sono situazioni, infatti, in cui preferiamo non divulgare il nostro lavoro ma desideriamo comunque sfruttare il comodo meccanismo di distribuzione dei componenti con NuGet.
Creare un feed privato è molto più facile di quanto si pensi. Abbiamo ben quattro opzioni nostra disposizione e dobbiamo semplicemente scegliere quella che più si addice alle nostre esigenze:
- Inserire i file .nupkg in una cartella condivisa nella rete locale;
- Creare un'applicazione web ASP.NET che sfrutti il pacchetto NuGet.Server (https://www.nuget.org/packages/NuGet.Server/), in cui è interamente contenuta la logica di gestione dei pacchetti;
- Avere un'esperienza più completa ricorrendo al NuGet Gallery Project (https://github.com/NuGet/NuGetGallery), che ci permette di disporre di un sito proprio come quello della galleria di nuget.org;
- Usare prodotti o servizi di terze parti che solitamente supportano i feed per altre tecnologie (es. NPM, Bower, Docker, ...).
Microsoft offre una guida alla creazione del proprio feed a questo indirizzo: https://docs.microsoft.com/it-it/nuget/hosting-packages/overview.
Il miglior compromesso tra funzionalità e rapidità di realizzazione consiste nell'usare il pacchetto NuGet.Server in un'applicazione ASP.NET da rendere disponibile nella intranet/extranet aziendale. Vediamo insieme come realizzarlo.
Creare l'applicazione ASP.NET
Iniziamo creando un nuovo progetto ASP.NET vuoto da Visual Studio. Scegliamo il .NET Framework 4.6.1 (o superiore).
Sfortunatamente, il pacchetto NuGet.Server non è ancora stato compilato per .NET Standard e, al momento, non è ancora compatibile con applicazioni ASP.NET Core.
Ora aggiungiamo un riferimento al pacchetto NuGet.Server digitando quanto segue dalla Package Manager Console di Visual Studio:
Install-Package NuGet.Server
Durante l'installazione ci verrà chiesto se sovrascrivere il web.config: consentiamolo e poi apriamo il file per impostare il valore di apiKey. Questa sarà la chiave segreta che consentirà ad uno sviluppatore di pubblicare i pacchetti NuGet e i suoi aggiornamenti nel feed privato. Ad esempio:
<add key="apiKey" value="SfMg01MC"/>
Non è necessario effettuare altra configurazione: possiamo già lanciare l'applicazione o pubblicarla in un server aziendale. L'applicazione si presenterà con un aspetto minimale ma, del resto, il suo scopo non è essere usata da browser. Piuttosto, interagiremo lanciando dei comandi o per mezzo di Visual Studio.
Proteggere il feed con la Basic Authentication
Nel caso in cui volessimo pubblicare il progetto su internet per raggiungere collaboratori che non si trovano nella nostra rete locale, è necessario impedire l'installazione indiscriminata dei nostri pacchetti ad utenti non autorizzati. In questo caso, la soluzione più rapida consiste nel proteggere il feed con la Basic Authentication. Installiamo il seguente pacchetto per aggiungere tale funzionalità.
Install-Package SimpleBasicAuthenticationModule
Appena terminata l'installazione, all'interno della cartella App_Data troveremo il file UserCredentials.xml in cui inseriremo le credenziali per l'accesso. Usiamo la forma NomeUtente;Password;Ruoli come in questo esempio:
<ArrayOfstring xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <string>Mario;12345678;Admin</string> </ArrayOfstring>
Da questo momento saremo obbligati ad inserire username e password per poter interagire con il feed NuGet.
Dato che stiamo usando la Basic Authentication, la password viaggerà in chiaro e perciò è fondamentale che il feed sia raggiungibile da un indirizzo HTTPS.
Configurare il feed privato sul PC dello sviluppatore
Affinché i nostri collaboratori siano in grado di pubblicare e scaricare pacchetti dal feed privato, è necessario che modifichino il contenuto del file NuGet.config, che si trova nelle seguenti directory:
- Su Windows: %AppData%\NuGet
- Su Linux e Mac: ~/.config/NuGet
Dunque apriamo il file NuGet.config ed integriamolo aggiungendo una nuova voce nel nodo packageSources, che andrà ad affiancarsi a quella già presente per nuget.org. Inoltre, se abbiamo implementato la Basic Authentcation, indichiamo le packageSourceCredentials.
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /> <add key="MyNuGetFeed" value="https://NOMEHOST/nuget" /> </packageSources> <!-- Le credenziali vanno indicate solo se abbiamo aggiunto la Basic Authentication --> <packageSourceCredentials> <MyNuGetFeed> <add key="Username" value="Mario" /> <add key="ClearTextPassword" value="12345678" /> </MyNuGetFeed> </packageSourceCredentials> <!-- Fine delle credenziali --> </configuration>
Invio dei pacchetti al feed privato
Non resta che pubblicare il primo pacchetto nel feed privato. Se stiamo usando il .NET Core, lanciamo il seguente comando avendo cura di sostituire il nome del pacchetto, la versione, il nome host e la nostra chiave API indicata nel web.config.
dotnet nuget push NOMEPACCHETTO.VERSIONE.nupkg -s https://DOMINIO/nuget -k APIKEY
In questo caso, è stato indicato il parametro -s per indicare esplicitamente la sorgente, ovvero il percorso del feed a cui inviare il pacchetto.
Nel caso in cui non avessimo il .NET Core installato, possiamo usare l'eseguibile di NuGet, ottenibile dal sito (https://www.nuget.org/downloads):
nuget.exe push NOMEPACCHETTO.VERSIONE.nupkg APIKEY -Source https://DOMINIO/nuget
Se tutto è stato eseguito correttamente, leggeremo questo messaggio:
Your package was pushed.
Installare un pacchetto dal feed privato
L'installazione sarà immediata, proprio come se il pacchetto provenisse dal feed "ufficiale". In applicazioni .NET Core possiamo usare il consueto comando:
dotnet add package NOMEPACCHETTO
Mentre, per le applicazioni per il .NET Framework useremo:
Install-Package NOMEPACCHETTO
Se usiamo l'interfaccia grafica di Visual Studio, facciamo attenzione a scegliere il nostro feed dal menu a tendina.
Disporre di un feed NuGet privato offre una comodità a cui è difficile rinunciare. Il fatto stesso di possedere un proprio feed ci spinge a pensare a come componentizzare i nostri progetti, al fine di renderli più modulari e di ridurre il codice duplicato.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Sostituire la GitHub Action di login su private registry
Installare le Web App site extension tramite una pipeline di Azure DevOps
Routing statico e PreRendering in una Blazor Web App
Creazione di plugin per Tailwind CSS: espandere le Funzionalità del Framework
Creare alias per tipi generici e tuple in C#
Effettuare chiamate con versioning da Blazor ad ASP.NET Core
Configurare il nome della run di un workflow di GitHub in base al contesto di esecuzione
Gestire la cancellazione di una richiesta in streaming da Blazor
Eseguire le GitHub Actions offline
Usare le collection expression per inizializzare una lista di oggetti in C#
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Creare gruppi di client per Event Grid MQTT
I più letti di oggi
- #aspilive accesso ai dati in #winrt con @SM15455. seguiteci live in streaming su https://aspit.co/w8-live
- la shell Bash sarà disponibile su Windows. è una shell nativa ed è frutto della collaborazione con ... https://aspit.co/build2016 #build2016
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- pare confermato, dalla RTM di #vs2012, che le #Metro Style App si chiameranno #Windows Store app. niente, invece, sul design language Metro.
- Geo-fencing, Bluetooth LE, Video editing API e molto, molto altro. Tutto questo nel nuovo Windows Phone 8.1... https://aspit.co/build-14 #bldwin
- Abbiamo pubblicato tutti i video di #netconfit => https://aspit.co/netconfit-20 Se avete perso i video di una track, ora potete guardarli comodamente! Grazie mille ancora a tutti quelli che hanno parteciato: appuntamento con .NET 6 all'anno prossimo!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- grazie a tutti per aver partecipato a #netconfit!materiale live nei prossimi giorni su https://aspit.co/netconf-18 alla prossima!
- ASP.NET MVC3 tool refresh: HTML5, jQuery1.5 e Modernizer, Entity Framework 4.1, ... http://aspitalia.com/mix-11 #mix11