让Jenkins知道定制的NuGet包源代码

让Jenkins知道定制的NuGet包源代码,jenkins,msbuild,nuget,msbuild-task,nuget-package-restore,Jenkins,Msbuild,Nuget,Msbuild Task,Nuget Package Restore,我有一个关于Jenkins和NuGet包恢复的小问题 我试图做的是在jenkins上构建解决方案(它工作得非常好)。我已经为解决方案启用了包还原,该解决方案生成了包含nuget.exe、nuget.Config和nuget.targets的.nuget文件夹 在Jenkins上,我在服务器上的一个私有包源中以NuGet包的形式脉动一些项目。我在其他项目中使用这些软件包,这些软件包应该建立在jenkins自己的基础上 VS知道私有包源,它在全局NuGet.Config文件(AppData下的文件)

我有一个关于Jenkins和NuGet包恢复的小问题

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

在Jenkins上,我在服务器上的一个私有包源中以NuGet包的形式脉动一些项目。我在其他项目中使用这些软件包,这些软件包应该建立在jenkins自己的基础上

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

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

我到目前为止所做的尝试

  • 我已经知道,将私有源代码添加到solutions NuGet.Config或NuGet.Targets文件的
    包源代码中可以解决问题,但这意味着,对于我想使用Jenkins构建的每个解决方案,我都必须这样做

  • 我还在AppData和ProgramData中使用了一些配置文件,将源代码添加到文件中的PackageSource标记中,甚至使其成为活动源代码,但这也没有帮助

  • 当然,提交包将是一个解决办法,但这不是期望的结果,因为我们希望忽略scm中的包

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

    非常感谢您的帮助

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


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

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

    nuget.exe还原SOLUTIONTOBUILD.sln-源代码http://nugetserver...

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

    在开发人员计算机上,包由Nuget VS加载项(而不是msbuild)还原,因此不要忘记撤消旧Nuget VS加载项可能已应用于项目文件的更改


    可以在

    中找到更多信息此问题的另一个解决方案是将自定义的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>
    
    
    


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

    [Windows]请确保jenkins服务帐户具有查看nuget包位置的权限。在我的例子中,我使用的是一个本地管理员帐户,该帐户没有导航NuGet文件夹的网络位置所需的域权限。另外,请确保包的嵌套不要太深。

    Nuget package restore via msbuild在当前版本的Nuget中不受欢迎-我们在Jenkins(Nuget.exe restore-source)中使用批处理步骤,从而避免Jenkins在不同帐户中运行并在不同位置搜索.config的问题。因此,基本上,您将命令行工具(NuGet.exe)放在生成服务器上,并在实际生成运行之前由jenkins还原包?是的,据我所知,目前推荐使用此方法。在开发人员的机器上,包是由Nuget VS Addin(而不是msbuild)还原的非常感谢你!你不知道我花了多长时间才找到你刚才在回答中提到的东西。非常感谢。我必须添加以下命令行命令:-RepositoryPath%WORKSPACE%\\packages
    之间的区别是什么?这是我为jenkins的所有工作所做的最好的解决方案。同意,这是迄今为止最好的解决方案。其他源代码以分号作为分隔符。你可能需要报价。