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
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Eseguire operazioni sui blob con Azure Storage Actions
Sfruttare al massimo i topic space di Event Grid MQTT
Load test di ASP.NET Core con k6
Creare un webhook in Azure DevOps
Gestire domini wildcard in Azure Container Apps
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Eseguire query manipolando le liste contenute in un oggetto mappato verso una colonna JSON
Visualizzare le change sul plan di Terraform tramite le GitHub Actions
Routing statico e PreRendering in una Blazor Web App
Installare le Web App site extension tramite una pipeline di Azure DevOps
I più letti di oggi
- anche domani dalle 17:30 seguite con noi live #build15 https://aspit.co/build15
- Webcast 'AJAX & ATLAS Overview'
- a #igds il 25 e 26/10 a Milano puoi sviluppare un gioco per #wp8 con @AppCampus. in palio 70.000 Euro: https://aspit.co/apa
- WinJS in Windows Phone 8.1
- la RC di #vs13 è compatibile con #win81 RTM, non con la Preview. l'annuncio ufficiale è su https://aspit.co/any
- Ancora un bug: esce Mono 0.23
- SSL Certificates for everyone on Azure
- Mostrare una MessageBox con un custom control
- disponibile la preview 1 ci #dotnetcore 2.1, #aspnetcore, #efcore. performance, novità e migliorie su https://aspit.co/bmf
- si continua a #netconfit con 'developing modern web apps with #aspnetcore', con il nostro @dbochicchiohttps://aspit.co/netconf-18