Agregar varios repos o fuentes de NuGet en el Pipeline de Azure DevOps
Cuando trabajamos con nuestros Pipelines en Azure DevOps, es posible que nos encontremos con proyectos que utilizan paquetes NuGet de diferentes fuentes o repos.
Aunque lo habitual es que trabajemos con proyectos que tienen una única fuente de paquetes, y que normalmente será nuget.org, nada ni nadie nos impide trabajar en proyectos con varios repositorios de paquetes.
De hecho, en organizaciones de un tamaño considerable, es bastante frecuente y habitual.
A modo de recordatorio y antes de abordar este caso, vamos a refrescar algunos comandos.
El comando tipo de compilación para un proyecto .NET Core es de la siguiente forma:
dotnet build
Y el comando para añadir un repo de paquetes NuGet:
dotnet nuget add
Dentro del Pipeline de Azure DevOps ya, podemos indicar el comando completo de compilación como por ejemplo:
dotnet build $(Build.SourcesDirectory)\src\MySolution.sln --configuration $(buildConfiguration)
Ahora bien, si el comando anterior te da problemas, te recomiendo indicar el repo en el que se encuentran nuestros paquetes NuGet de forma directa, aunque ese repo sea el genérico de nuget.org.
Nuestro comando quedaría ahora de la forma:
dotnet build $(Build.SourcesDirectory)\src\MySolution.sln --configuration $(buildConfiguration) --source https://api.nuget.org/v3/index.json --force
De esta forma, podemos indicar la fuente de paquetes NuGet que debemos utilizar.
Ahora bien, ¿qué sucede si nuestros proyectos utilizan varias fuentes de paquetes NuGet?.
En mi caso voy a explicar cómo hacerlo, a la vez, con una fuente pública de paquetes NuGet como nuget.org y con una fuente privada de paquetes NuGet como feedz.io de la que he hablado en otras entradas de mi blog: Cómo montar un repo de paquetes NuGet privado con feedz.io.
Dentro del comando dotnet build podemos indica tantas veces –source seguido de la url de nuestra fuente como deseemos o como fuentes diferentes de paquetes NuGet tengamos en nuestros proyectos.
Por lo tanto, el comando anterior debería completarse en nuestro caso como (deberíamos indicar la url de feedz.io correcta):
dotnet build $(Build.SourcesDirectory)\src\MySolution.sln --configuration $(buildConfiguration) --source https://api.nuget.org/v3/index.json --source https://f.feedz.io/foo/foorepo/nuget --force
Esta sería la explicación general.
Ahora bien, en nuestro caso particular, y por darle una vuelta de tuerca adicional como extra a esta entrada, debemos tener en cuenta que feedz.io nos permite crear repos privados protegidos con usuario y contraseña.
En ese caso, el comando anterior será válido, pero no funcionará correctamente, ya que no podrá descargarse los paquetes del repo al estar protegidos con usuario y contraseña.
Para solventar esto, debemos preparar un paso o step previo que nos permita registrar el repo privado. Eso lo haremos con el comando dotnet nuget add.
En nuestro particular caso:
- script: dotnet nuget add source https://f.feedz.io/foo/foorepo/nuget
-n FooRepo
-u Reader
-p T-aaaaaabbbbbbccccccddddddeeeeeefffff
--store-password-in-clear-text
displayName: 'dotnet nuget add FooRepo'
Aquí indicamos como nombre FooRepo, como usuario Reader, y como contraseña el Api-Key que hemos generado en nuestro repo privado de feedz.io (en este caso).
Una vez ejecutado este paso previo, podremos ejecutar el comando de compilación.
Bien podríamos omitir las fuentes de los repos (–source) en el comando, pero en nuestro caso y para evitar errores lo utilizaremos dentro del propio paso o step de nuestro Pipeline.
Así que después de añadir el repo con dotnet nuget add, añadimos este paso que indicaba anteriormente:
- script: dotnet build $(Build.SourcesDirectory)\src\MySolution.sln
--configuration $(buildConfiguration)
--source https://api.nuget.org/v3/index.json
--source https://f.feedz.io/foo/foorepo/nuget
--force
displayName: 'dotnet build $(buildConfiguration)'
Espero que todo esto que te comento te ayude a poder configurar varios repos.