I've got a little issue regarding Jenkins and NuGet package restore.
What I'm trying to do is build solutions on jenkins (which works perfectly fine). I have enabled package restore for the solution, which generates the .nuget-folder containing NuGet.exe, NuGet.Config and NuGet.targets.
On Jenkins, I am pulblishing some projects as NuGet-packages in a private package source on our server. I am using those packages in other projects, which should be build on jenkins themselves.
VS knows about the private package source, it's configured in the global NuGet.Config-file (the one under AppData) and it is not disabled (by default).
Now, when I try to build a solution which needs a package from the private package source, the build fails, because jenkins doesn't know about it, and is therefore commiting an empty -source
-parameter when restoring packages which is not beeing replaced as jenkins doesn't know about the custom source.
What I've tried so far
I already know that adding the private source to the solutions NuGet.Config- or NuGet.Targets-file's Package-Source
would solve the problem, but that would mean, i would have to do so for every solution I want to build using Jenkins.
I have also played around a bit with the config-files in AppData and ProgramData by adding the source in to the package-source tags in the files and even making it the active-source, but that didn't help either
of cource, commiting the packages would be a workaround, but thats not the desired outcome, as we'd like to ignore the packages in scm.
Basically, i'd like to know if there is a way to make Jenkins constantly aware of the private package source, or to manipulate the NuGet-installations on the developers maschines, so that they generate a NuGet.targets
-file which contains the private package-source. An other possible fix would be a parameter for msbuild, which I'm not aware of.
Any help is greatly appreciated!
To sum up (and extend) my comments:
Nuget package restore via msbuild is deprecated in current versions of Nuget (2.7 and higher)
We use a batch step in Jenkins
nuget.exe restore SOLUTIONTOBUILD.sln -source http://nugetserver...
and avoid thereby the problem that the Jenkins service runs in a different account and searches for the .config in a different place.
On the developer machines, the packages are restored by the Nuget-VS-Addin (and not by msbuild), so don't forget to undo the changes that the old Nuget-VS-Addin may have applied to your project-files.
More Information can be found in the Nuget-Docs