visual studio revirtiendo restaurar restauracion referencia que pudo proyecto para paquetes paquete los instalar hace faltan este error equipo elemento declarado como cambios jenkins msbuild nuget msbuild-task nuget-package-restore

studio - Haz que Jenkins esté al tanto de la fuente del paquete NuGet personalizado



restaurar paquetes nuget console (3)

Tengo un pequeño problema con respecto a la restauración del paquete de Jenkins y NuGet.

Lo que estoy tratando de hacer es construir soluciones en jenkins (que funciona perfectamente bien). He habilitado la restauración de paquetes para la solución, que genera la carpeta .nuget que contiene NuGet.exe, NuGet.Config y NuGet.targets.

En Jenkins, estoy publicando algunos proyectos como paquetes NuGet en una fuente de paquete privado en nuestro servidor. Estoy usando esos paquetes en otros proyectos, que deberían ser construidos en jenkins.

VS conoce el origen del paquete privado, está configurado en el archivo global NuGet.Config (el que está en AppData) y no está deshabilitado (de forma predeterminada).

Ahora, cuando trato de construir una solución que necesita un paquete del origen de paquete privado, la compilación falla, porque jenkins no lo sabe, y por lo tanto está comprometiendo un -source vacío al restaurar paquetes que no están siendo reemplazados Como Jenkins no sabe acerca de la fuente personalizada.

Lo que he probado hasta ahora

  1. Ya sé que agregar la fuente privada a las soluciones NuGet.Config- o NuGet.Targets-file''s Package-Source solucionaría el problema, pero eso significaría que tendría que hacerlo para cada solución que quiera construir utilizando Jenkins.

  2. También he jugado un poco con los archivos de configuración en AppData y ProgramData agregando la fuente a las etiquetas de fuente del paquete en los archivos e incluso convirtiéndola en la fuente activa, pero eso tampoco ayudó.

  3. Por supuesto, comentar los paquetes sería una solución alternativa, pero ese no es el resultado deseado, ya que nos gustaría ignorar los paquetes en scm.

Básicamente, me gustaría saber si hay una manera de hacer que Jenkins esté constantemente al tanto de la fuente del paquete privado, o de manipular las instalaciones NuGet en las máquinas de los desarrolladores, para que generen un NuGet.targets NuGet.targets que contenga la información privada. paquete-fuente. Otra posible solución sería un parámetro para msbuild, que no conozco.

¡Cualquier ayuda es muy apreciada!


Otra solución a este problema es agregar su NuGet.config y archivo ejecutable personalizados a un directorio en el servidor Jenkins, y agregar un paso de compilación para ejecutar nuget usando la configuración personalizada.

C:/nuget/nuget.exe update "%WORKSPACE%/Project.sln" -ConfigFile C:/nuget/NuGet.config

Un NuGet.config que agregue un origen de paquete personalizado se vería así:

<?xml version="1.0" encoding="utf-8"?> <configuration> <packageRestore> <add key="enabled" value="True" /> <add key="automatic" value="True" /> </packageRestore> <packageSources> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /> <add key="nuget.org" value="https://www.nuget.org/api/v2/" /> <add key="My Custom Package Source" value="http://localhost/guestAuth/app/nuget/v1/FeedService.svc/" /> </packageSources> <activePackageSource> <add key="nuget.org" value="https://api.nuget.org/v3/index.json" /> </activePackageSource> </configuration>

El nuget.exe independiente se puede descargar here

Este enfoque hace que sea más fácil agregar fuentes personalizadas a todos sus trabajos jenkins al cambiar el mismo archivo de configuración.


Para resumir (y ampliar) mis comentarios:

La restauración del paquete Nuget a través de msbuild está en desuso en las versiones actuales de Nuget (2.7 y posteriores)

Utilizamos un paso por lotes en Jenkins

nuget.exe restore SOLUTIONTOBUILD.sln -source http://nugetserver...

y evitar así el problema de que el servicio Jenkins se ejecuta en una cuenta diferente y busca el .config en un lugar diferente.

En las máquinas de los desarrolladores, los paquetes son restaurados por el Nuget-VS-Addin (y no por msbuild), así que no olvide deshacer los cambios que el antiguo Nuget-VS-Addin puede haber aplicado a sus archivos de proyecto.

Más información se puede encontrar en los Nuget-Docs


[Windows] Asegúrese de que la cuenta de servicio de Jenkins tenga permiso para ver la ubicación del paquete nuget. En mi caso, estaba usando una cuenta de administrador local que no tenía los permisos de dominio necesarios para navegar por la ubicación de red de nuestra carpeta NuGet. Además, asegúrese de que los paquetes no estén anidados demasiado profundamente.