Cómo crear tu propio NuGet Server

En este articulo veremos como crear tu propio NuGet Server, hacer un paquete de un proyecto que quieras versionar, publicar este paquete y consumirlo en cualquier proyecto.

El problema

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

Ese es el momento en donde reflexionas y te das cuenta que debes tener disponible todas las versiones de la librería, para los proyectos y el equipo de desarrollo.

La solución

Tener nuestro propio NuGet Server nos puede ayudar 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 NuGet Server

Para poner en funcionamiento nuestro servidor de NuGet lo único que necesitamos es crear una Aplicación Web vacía y agregar un el paquete NuGet.Server

Creating an Empty Web Application for a NuGet Server
Creando una aplicación web vacía para un servidor NuGet.
Adding the package NuGet.Server
Agregando el paquete NuGet.Server a nuestro proyecto.

Con tan solo hacer esto y ejecutar el proyecto ya tendremos nuestro NuGet Server funcionando.

NuGet Server funcionando desde Visual Studio

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

Publicando el NuGet Server en IIS

Lo primero que debemos hacer es crear un Sitio Web, para ello, luego de abrir la ventana de administración de IIS, hacemos clic derecho sobre Sites y luego en Add Website… lo cual nos abrirá una ventana para indicar los detalles del nuevo Sitio Web, como el nombre, la ruta física donde estarán los archivos y el puerto que usará. Con esto tendríamos la configuración básica.

Creando el sitio web en IIS que alojará el NugetServer

Ahora vamos a publicar el proyecto donde tenemos nuestro NuGet Server en el sitio web que acabamos de crear: básicamente hacemos clic derecho sobre el nombre del proyecto y luego en Publish… esto nos abrirá una ventana donde debemos seleccionar como destino la opción IIS, FTP, etc e indicar los datos de sitio destino, como se ve en paso 2 de la a imagen, guardar la información y posteriormente hacer clic en Pusblish.

Publishing our NuGet server in IIS
Publicando nuestro NuGet Server en IIS
NuGet Server running from IIS
NuGet Server funcionando desde IIS

Adicionalmente es necesario configurar en el Application Settings (web.config) una llave o apiKkey la cual deberá ser indicada al momento de publicar un paquete. En esta caso coloqué el valor 809.

Nuget Server Api Key
Configuración del apiKey en NuGetServer

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

Creando y publicando un paquete

Ya casi estamos a punto de crear nuestro primer paquete, el cual podremos versionar y tenerlo disponible desde nuestro servidor de NuGet.

Primero necesitamos instalar el paquete NuGet.CommandLine en el proyecto que queremos crear un paquete, en mi caso cree un proyecto de prueba llamado MyLibrary. El NuGet.CommandLine nos permitirá ejecutar comandos NuGet en nuestro proyecto.

NuGet Pack

NuGet Pack es el comando que nos crea el paquete que subiéremos al servidor, es decir un archivo con extensión .nupkg, del proyecto que le indiquemos. Este comando puede ser ejecutado en el Package Manager Console y es necesario indicarle como argumento la ubicación del proyecto y con la configuración en que queremos que sea creado, en este caso: release, o sea, listo para ser usado en producción.

La descripción, el autor, la compañía, versión y demás informaciones del paquete deben ser indicadas en las propiedades del proyecto. Una vez hecho esto podemos ejecutar el comando:

NuGet Pack .\MyLibrary\MyLibrary.csproj -Properties Configuration=release
NuGetPackCommand
Comando NuGet Pack

Una vez ejecutado el comando, nos creará el paquete MyLibrary.1.0.0.nupkg en la carpeta de la solución del proyecto.

NuGet Push

NuGet Push es el comando que nos permitirá publicar nuestro paquete al NuGet Server, solo es necesario indicarle donde se encuentra el paquete a publicar, la url del servidor y el apiKey que configuramos anteriormente.

NuGet Push .\MyLibrary.1.0.0.nupkg -Source http://localhost:2019/nuget -ApiKey 809
NuGet Package Published
NuGet Package publicado

Consumiendo un NuGet Package

Ya que el paquete esta nuestro Nuget Server podemos consumirlo, pero primero debemos agregarlo como una fuente de paquetes en el NuGet Package Manager, para eso damos clic derecho sobre un proyecto, luego clic en Manage NuGet Package… y agregamos la url de nuestro NuGet Server como fuente de paquetes.

NuGet Server as Package Source
Nuestro NuGet Server as Package Source

Con esto ya podremos instalar nuestro paquete en cualquier proyecto.

Nuestro paquete MyLibrary

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

Otros artículos