Cómo crear tu propio servidor NuGet

En este artículo veremos cómo crear tu propio servidor NuGet, hacer un paquete, publicarlo e instalarlo en cualquier proyecto.

El problema

¿Qué hacemos cuando desarrollamos una librería de la que dependen diferentes proyectos, y esta librería recibe integraciones continuas de código varias veces al día, generando posibles breaking changes entre versiones, una función era obsoleta en la nueva versión, o tiene una nueva implementación.

Ese es el momento en que nos damos cuenta de que debemos tener disponibles todas las versiones de la librería, para los proyectos y el equipo de desarrollo.

La solución

Tener nuestro propio servidor NuGet, esto puede ayudarnos a generar un paquete con cada versión de la librería y tenerlo disponible para cada proyecto y miembro del equipo de desarrollo.

Creando nuestro servidor NuGet

Hagamos que nuestro servidor NuGet funcione, para eso, primero debemos crear una Aplicación Web vacía y agregar el paquete NuGet.Server.

Creating Project
Creando una aplicación web vacía para un servidor NuGet.
Adding NuGet.Server package to the project
Agregando el paquete NuGet.Server a nuestro proyecto.

Con solo hacer esto y ejecutar el proyecto, tendremos nuestro servidor NuGet funcionando.

Runing NuGet Server
Servidor NuGet que se ejecuta desde Visual Studio

Aunque está funcionando, lo hace a través de Visual Studio e IIS Express, lo que significa que si detenemos el proyecto, nuestro servidor dejará de funcionar, para no depender de eso, lo publicaremos en un servidor IIS local.

Publicando el servidor NuGet en IIS

Lo primero que debemos hacer es crear un Web Site, para eso, después de abrir la ventana de administración de IIS, hacemos clic derecho en Sites y luego Add Website… que abrirá una ventana para indicar los detalles del nuevo sitio web, como el nombre, el ruta donde estarán los archivos y el puerto. Esta es la configuración básica.

Creating NuGet server Site in IIS
Creando el Sitio Web en IIS que aloja el servidor NuGet

Ahora vamos a publicar nuestro servidor NuGet en el sitio web que acabamos de crear: básicamente hacemos clic derecho en el nombre del proyecto desde Visual Studio y luego en Publish… esto abrirá una ventana donde debemos seleccionar el destino del sitio, como se ve en el paso 2 de la imagen, guardamos la información y hacemos clic en Pusblish.

Publish NuGet Server in IIS
Publicando nuestro servidor NuGet en IIS
Runing NuGet Server
Servidor NuGet ejecutandose desde IIS

También es necesario configurar una clave apiKkey en la Configuración de la aplicación (web.config), que debe indicarse al publicar un paquete. En este caso utilizo el valor 809, en un caso real, este valor debe de ser más complejo.

Configuring NuGet Package apiKey
Configurando el apiKey en el servidor NuGet

Con esto, nuestro servidor está listo para recibir y servir paquetes NuGet.

Creando y publicando un paquete

Estamos casi listos para crear nuestro primer paquete, que podemos versionar y tener disponible desde nuestro servidor NuGet.

Primero necesitamos instalar el paquete NuGet.CommandLine en el proyecto/librería que queremos versionar como paquete, en mi caso voy a crear un proyecto de prueba llamado MyLibrary. NuGet.CommandLine nos permitirá ejecutar comandos NuGet en nuestro proyecto.

NuGet Pack

NuGet Pack es el comando que crea el paquete que queremos publicar en el servidor, es decir, un archivo con extensión .nupkg, del proyecto que le indiquemos. Este comando se puede ejecutar en el Package Manager Console y toma como argumento la ruta del proyecto y la configuración con la que queremos que se cree, en este caso: release, es decir, listo para usarse en producción.

La descripción, el autor, la compañía, la versión y otra información del paquete deben indicarse en las propiedades del proyecto. Una vez hecho esto, podemos ejecutar el comando:

NuGet Pack. \ MyLibrary \ MyLibrary.csproj -Properties Configuration = release
Creating NugGet package
Información del paquete a la derecha, y comando NuGet Pack en la parte inferior

Después de ejecutar el comando, se creará el paquete MyLibrary.1.0.0.nupkg en la carpeta de soluciones del proyecto.

NuGet Push

NuGet Push es el comando que nos permitirá publicar nuestro paquete en NuGet Server, tenemos que indicar la ruta del paquete, la URL del servidor y la apiKey que configuramos previamente.

NuGet Push .\MyLibrary.1.0.0.nupkg -Source http://localhost:2019/nuget -ApiKey 809
Pushing NuGet package to the server
Paquete NuGet publicado

Instalando el paquete NuGet

Con el paquete es nuestro servidor Nuget, podemos instalarlo, pero primero debemos agregar nuestro servidor como fuente de paquetes en el NuGet Package Manager, para eso hacemos clic derecho en un proyecto, luego hacemos clic en Manage NuGet Package… y agregamos la URL de nuestro NuGet Server como fuente de paquetes.

NuGet package source
Nuestro servidor NuGet como fuente del paquete

Con esto podemos instalar nuestro paquete en cualquier proyecto.

Created NuGet package
Paquete MyLibrary

Si te gustó el el artículo, tienes alguna duda o comentario escríbeme por Twitter @robertlluberes