24

关于 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-filePackage-Source可以解决问题,但这意味着,对于我想使用 Jenkins 构建的每个解决方案,我都必须这样做。

  2. 我还通过将源添加到文件中的 package-source 标记甚至使其成为活动源,来使用 AppData 和 ProgramData 中的配置文件,但这也无济于事

  3. 当然,提交包是一种解决方法,但这不是预期的结果,因为我们想忽略 scm 中的包。

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

任何帮助是极大的赞赏!

4

4 回答 4

24

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

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

于 2014-08-06T07:38:11.180 回答
13

此问题的另一个解决方案是将自定义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

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

于 2015-12-23T16:09:04.340 回答
0

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

于 2017-09-20T12:49:27.310 回答
0

jenkins 使用的 NuGet 配置文件如下,在我的情况下修复这里工作,希望它有帮助

在此处输入图像描述

于 2022-02-01T20:24:16.603 回答