如何获取TFS2015 Build(Build.vnext)和NuGet包还原以使用自定义包源

时间:2015-07-13 13:03:33

标签: tfs tfsbuild azure-devops tfs2015 nuget-package-restore

我正在尝试将我们的TFS2015 Build(TFSBuild vnext)与VS Team Services一起使用。

到目前为止,大多数blogs and documentation都有帮助,除了在尝试构建使用自定义包源进行NuGet自动包恢复的项目时。

我已经成功部署了一个团队服务构建代理(构建的新机制),并且在恢复NuGet包的构建任务失败之前似乎一切顺利。

失败是由于未从已安装的VS配置中获取自定义/私有包源,因此找不到这些包。默认NuGet包源中的传统包确实可以正常恢复。

如何指定NuGet在使用代理时使用的其他包源?

编辑:vcastro询问了NuGet Installer构建步骤,并在该构建步骤的配置中定义了路径。以上是使用Visual Studio Build步骤和集成选项来使NuGet恢复包。请参阅此图片以供参考:http://i.imgur.com/Hrqhhk2.png

8 个答案:

答案 0 :(得分:17)

或者,您也可以在构建配置中的NuGet Installer步骤之前添加Visual Studio Build构建步骤,以恢复所有NuGet包。

在那里,您可以将私人仓库的位置作为参数传递给nuget.exe

-source "https://www.nuget.org/api/v2/;http://mynugetserver"

答案 1 :(得分:7)

我在网上找不到什么成功,但在摆弄以下内容后会有所帮助:

OK似乎为每个用户帐户存储为NuGet.config配置的包源,例如

c:\Users\<<username>>\AppData\Roaming\NuGet\NuGet.config

我的问题难以解决,因为构建代理在Windows Service帐户下以Local System运行。因此,为了获得构建的NuGet配置,我不得不使用以下路径:

  • 64位Windows C:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config
  • 32位Windows C:\Windows\System32\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config

您可能需要具有提升的权限才能创建 NuGet 子文件夹和 NuGet.Config 文件。

注意:我没有使用Local Service帐户的解决方案。以上内容仅适用于Local System(或实际用户)帐户。

答案 2 :(得分:7)

将NuGet.config添加到指定备用程序包位置的项目中。解决方案规则明确,并在官方documentation中解释。

答案 3 :(得分:7)

有一个名为“NuGet Installer”的新VSTS任务,它允许您签入NuGet.config文件并指定不同的包源。在运行MSBuild之前运行此任务。

如果您使用的是VSTS NuGet Feed,则需要将构建服务帐户添加到Feed,以便下载软件包https://www.visualstudio.com/get-started/package/use/common-identities

enter image description here

答案 4 :(得分:2)

一个解决方案(适用于我)是将tfs 2015构建代理服务(在我的构建计算机VSO代理tsf.Agent-PC上)更改为tfsagent,例如,并将Nuget.config添加到C:\ Users \ tfsagent \应用程序数据\漫游\的NuGet。这就是全部!

答案 5 :(得分:1)

  1. 在解决方案的nuget.config文件中指定自定义NuGet供稿网址。不要存储任何用户名&amp;此文件中的密码。

    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="MyCompany" value="https://nuget.mycompany.com:443/nuget" />
    
  2. 创建用户名&amp; VSTS中构建定义中的密码变量。变量可以加密,不会显示在任何构建日志输出中。在这里,我将创建 MyCompanyNugetUser MyCompanyNugetPwd 变量。

  3. 在我们的构建步骤中,我们添加了一个Powershell脚本作为第一个操作,这将读取用户名&amp;密码变量并更新构建计算机上的用户级nuget.config文件。以下是我的内联Powershell脚本中的代码段:

      

    参数:

    $(MyCompanyNugetUser) $(MyCompanyNugetPwd)
    
         

    脚本:

    param($user, $pwd)
    
    $nugetFile = "$ENV:AGENT_HOMEDIRECTORY\agent\worker\tools\nuget.exe"
    Write-Output "Looking for nuget.exe in $nugetFile"
    
    if (-not (Test-Path $nugetFile))
    {
      Write-Error "nuget.exe could not be located."
      return
    }
    
    Write-Output "nuget.exe located"
    
    $cmd = "$nugetFile sources add -name MyCompany -source https://nuget.mycompany.com:443/nuget -username $user -password $pwd -StorePasswordInClearText"
    Write-Output $cmd
    iex $cmd
    
  4. 接下来,我们继续执行Microsoft模板中的默认NuGet Restore步骤

  5. 更多信息:https://codingcase.com/2016/07/27/vsts-build-setup-custom-nuget-feeds-with-authentication/

    HTH

答案 6 :(得分:0)

在Team Foundation Server 2015的RTM中,您必须添加类型&#34; NuGet Installer&#34;的构建步骤,并在运行实际构建过程之前还原解决方案文件的包。在此任务中,您可以传递包含存储库路径的参数-ConfigFile path/to/nuget.config

例如:

<configuration>
  <packageSources>
    <add key="Internal Nuget" value="\\srv-nuget\Repo" />
  </packageSources>
</configuration>

enter image description here

答案 7 :(得分:-1)

如果您无法在UWP上进行此操作,请确保您正确拼写了包名称的CASE。如果情况有误,那么(仅适用于UWP)我们的构建服务器无法构建。

例如,如果您有一个名为 Com.Company.Components 的软件包,请使用“install-package com.company更新软件包。组件 “(请注意首字母大小写的情况)然后构建服务器上的UWP构建可能无法在本地存储中找到该包。