Creare un feed NuGet privato

di Moreno Gentili, in ASP.NET Core,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi