23

I'm trying to get our TFS2015 Build (TFSBuild vnext) going along with VS Team Services.

Thus far most blogs and documentation has been helpful, except for when trying to build a project that uses custom package sources for NuGet automatic package restore.

I've successfully deployed an a Team Services Build Agent (the new mechanism for builds) and all seemed to go well until the build task to Restore NuGet packages failed.

The failure was due to custom/private package source not being picked up from the installed VS configuration, so those packages could not be found. The traditional packages from the default NuGet package feed did restore without issue.

How do I specify the additional package sources for NuGet to use when using an agent?

EDIT: vcastro asked about the NuGet Installer build step and defining paths in the configuration of that build step. The above is using the Visual Studio Build step and the integrated option to have NuGet restore packages. Refer this image for reference: http://i.imgur.com/Hrqhhk2.png

4

8 回答 8

17

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

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

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

于 2015-08-07T09:25:57.890 回答
7

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

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

在此处输入图像描述

于 2015-11-27T12:11:08.870 回答
7

我在网上搜索了一点成功,但在摆弄以下内容后会有所帮助:

好的似乎为 NuGet.config 配置的包源是按用户帐户存储的,例如

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

我的问题更难解决,因为构建代理Windows ServiceLocal System帐户下运行。因此,要为构建获取 NuGet 配置,我必须改用以下路径:

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

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

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

于 2015-07-13T13:10:51.157 回答
7

将 NuGet.config 添加到指定备用包位置的项目中。解析规则在官方文档中有明确的定义和解释。

于 2015-07-15T23:05:17.860 回答
2

例如,一种解决方案(对我有用)是将 tfs 2015 构建代理服务(在我的构建机器 VSO 代理 tsf.Agent-PC 上)的帐户更改为 tfsagent,并将 Nuget.config 添加到 C:\Users\tfsagent\AppData \漫游\Nuget。就这样!

于 2015-09-17T06:42:39.860 回答
1
  1. 在解决方案的 nuget.config 文件中指定您的自定义 NuGet 源 URL。不要在此文件中存储任何用户名和密码。

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

  3. 在我们的构建步骤中,我们添加一个 Powershell 脚本作为第一个操作,这将读取用户名和密码变量并更新构建机器上的用户级 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. 接下来,我们只是继续从微软的模板中执行默认的 NuGet 还原步骤

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

高温高压

于 2016-07-27T07:19:32.813 回答
0

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

例如:

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

在此处输入图像描述

于 2016-03-22T14:44:29.833 回答
-1

如果您无法使其仅在 UWP 上工作,请确保您的包名称的 CASE 拼写正确。如果大小写错误,那么(仅适用于 UWP)我们的构建服务器将无法构建。

例如,如果您有一个名为Com.Company.Components的包并使用“install-package com.company.components ”更新该包(注意首字母的大小写),则构建服务器上的 UWP 构建可能无法找到本地商店中的包裹。

于 2017-06-06T02:50:34.807 回答