让Jenkins了解自定义NuGet包源

时间:2014-08-05 13:30:46

标签: jenkins msbuild nuget msbuild-task nuget-package-restore

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

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

在Jenkins上,我在我们服务器上的私有软件包源代码中创建了一些项目作为NuGet-packages。我在其他项目中使用这些包,这些包应该建立在jenkins本身上。

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

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

到目前为止我尝试了什么

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

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

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

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

    非常感谢任何帮助!

3 个答案:

答案 0 :(得分:21)

总结(并扩展)我的评论:

当前版本的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

中找到

答案 1 :(得分:9)

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

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

添加自定义包源的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>

可以下载独立的nuget.exe here

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

答案 2 :(得分:0)

[Windows]确保Jenkins服务帐户有权查看nuget包位置。在我的情况下,我使用的本地管理员帐户没有必要的域perms来导航NuGet文件夹的网络位置。另外,请确保包装没有嵌套太深。