【问题标题】:Make Jenkins aware of custom NuGet Package Source让 Jenkins 了解自定义 NuGet 包源
【发布时间】:2014-09-28 04:33:41
【问题描述】:

我在 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. 当然,提交包是一种解决方法,但这不是我们想要的结果,因为我们想忽略 scm 中的包。

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

非常感谢任何帮助!

【问题讨论】:

  • 通过 msbuild 进行 Nuget 包还原在当前版本的 Nuget 中已弃用 - 我们在 Jenkins 中使用批处理步骤(nuget.exe restore -source),从而避免 Jenkins 在不同帐户中运行并搜索的问题.config 在不同的地方。
  • 所以基本上,您将命令行工具(NuGet.exe)放在构建服务器上,并在实际构建运行之前由 jenkins 恢复包?
  • 是的,据我所知,目前推荐这种方法。在开发人员机器上,包由 Nuget-VS-Addin(而不是 msbuild)恢复。
  • 好的,既然这回答了我的问题,你可以提供一个我可以接受的实际答案;)非常感谢!

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


【解决方案1】:

总结(和扩展)我的 cmets:

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

此问题的另一个解决方案是将您的自定义 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 作业添加自定义提要。

【讨论】:

  • 您不知道我已经尝试了多长时间才能找到您刚刚在答案中指定的内容。谢谢!!!
  • 我必须添加以下命令行参数:-RepositoryPath %WORKSPACE%\\packages
  • &lt;packageSources&gt;&lt;activePackageSource&gt;有什么区别?
  • 这是 IMO 最好的解决方案,我最终为我所有的詹金斯工作做了这个。
  • 同意,这是迄今为止最好的解决方案。
【解决方案3】:

[Windows] 确保 Jenkins 服务帐户有权查看 nuget 包位置。就我而言,我使用的本地管理员帐户没有导航 NuGet 文件夹的网络位置所需的域权限。另外,请确保包没有嵌套太深。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多