让Jenkins了解自定义NuGet包源

noz*_*man 20 msbuild msbuild-task nuget jenkins nuget-package-restore

我有一些关于Jenkins和NuGet包恢复的问题.

我正在尝试做的是在jenkins上构建解决方案(它工作得非常好).我已为解决方案启用了包还原,生成包含NuGet.exe,NuGet.Config和NuGet.targets的.nuget文件夹.

在Jenkins,我正在我们服务器上的私有包源中创建一些项目作为NuGet包.我在其他项目中使用这些包,应该在jenkins自己的基础上构建.

VS了解私有包源,它在全局NuGet.Config文件(AppData下的文件)中配置,并且未被禁用(默认情况下).

现在,当我尝试构建一个需要来自私有包源的包的解决方案时,构建失败,因为jenkins不知道它,因此-source在恢复未被替换为jenkins的包时提交空参数不知道自定义源.

到目前为止我尝试过的

  1. 我已经知道将私有源添加到解决方案NuGet.Config-或NuGet.Targets-file Package-Source将解决问题,但这意味着,我必须为我想要使用Jenkins构建的每个解决方案这样做.

  2. 我还通过将源代码添加到文件中的package-source标签,甚至使其成为活动源,在AppData和ProgramData中使用了配置文件,但是这也没有帮助.

  3. cource,提交包将是一种解决方法,但这不是理想的结果,因为我们想忽略scm中的包.

基本上,我想知道是否有办法让Jenkins不断了解私有包源,或者操纵开发人员机器上的NuGet安装,以便生成NuGet.targets包含私有包源的-file. .另一个可能的修复是msbuild的参数,我不知道.

任何帮助是极大的赞赏!

fra*_*och 23

总结(并扩展)我的意见:

在当前版本的Nuget(2.7及更高版本)中不推荐通过msbuild进行Nuget包恢复

我们在Jenkins中使用批处理步骤

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

并避免Jenkins服务在不同帐户中运行并在不同位置搜索.config的问题.

在开发人员计算机上,这些包由Nuget-VS-Addin(而不是msbuild)恢复,因此不要忘记撤消旧的Nuget-VS-Addin可能已应用于项目文件的更改.

更多信息可以在Nuget-Docs中找到

  • 以分号作为分隔符的其他来源。您可能需要报价。 (2认同)

Fáb*_*ira 11

此问题的另一个解决方案是将自定义NuGet.config和可执行文件添加到Jenkins服务器上的目录中,并添加构建步骤以使用自定义配置运行nuget.

C:\nuget\nuget.exe update "%WORKSPACE%\Project.sln" -ConfigFile C:\nuget\NuGet.config
Run Code Online (Sandbox Code Playgroud)

添加自定义包源的NuGet.config看起来像这样:

<?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>
Run Code Online (Sandbox Code Playgroud)

独立的nuget.exe可以在这里下载

通过更改相同的配置文件,此方法可以更轻松地向所有jenkins作业添加自定义源.