2015-07-13 88 views
22

我试图让我们的TFS2015构建(TFSBuild vnext)与VS团队服务。如何获得TFS2015构建(Build.vnext)和NuGet包恢复使用定制包源

迄今为止,大多数blogs and documentation一直很有帮助,除了尝试构建使用NuGet自动包恢复的自定义包源的项目时。

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

失败的原因是没有从安装的VS配置中找到定制/私有包源,因此无法找到这些包。来自默认NuGet包饲料的传统软件包的恢复没有问题。

如何在使用代理时指定NuGet使用的附加软件包源?

编辑:vcastro询问有关NuGet安装程序生成步骤和在该生成步骤的配置中定义路径。以上是使用Visual Studio Build步骤和集成选项来使NuGet恢复软件包。请参阅该图片以供参考:http://i.imgur.com/Hrqhhk2.png

+0

为什么不只是创建一个NuGet服务器来托管您的定制软件包? –

+0

这就是我们正在做的。问题是如何让NuGet(当由新的TFS 2015 Build代理运行时)知道NuGet关于新的软件包源代码。这就是NuGet.Config的用途,但它不是从本地文件夹和只有用户/服务配置文件路径中选取它(请参阅下面的答案)。 – Jaans

+0

您是否在Nuget安装程序任务的高级设置中指定了nuget.exe的路径(您拥有自定义的nuget.config)?我们也有这个问题,直到我们将构建任务指向我们自己的nuget.exe和nugget.config。 – vcastro

回答

6

我凑收效甚微的网站,但摆弄以下后,将帮助:

OK看来,配置为NuGet.config包源存储每个用户帐户,例如

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

我的问题是很难解决的,因为生成剂的Local System帐户下运行的Windows Service。因此,要获得的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(或实际用户)帐户。

7

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

+1

谢谢丹尼尔。我确实在相同的文件夹位置和一个子文件夹.NuGet中都有一个NuGet.Config文件,但它不起作用。所以我不确定新的TFS 2015 Build Agent是否会以某种方式阻止它。我能做到的唯一方法就是如果我在上面添加路径。 – Jaans

17

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

在那里,你可以通过你的私人回购作为参数的位置nuget.exe

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

+0

尝试了很多其他想法后为我工作。现在它的版本3 https://www.nuget.org/api/v3/ –

2

一个解决方案(我的作品)是TFS 2015年我的构建机器上生成代理服务(改变帐户VSO代理tsf.Agent-PC),以tfsagent,例如,添加Nuget.config到C:\用户\ tfsagent \应用程序数据\漫游\的NuGet。就这样!

7

有一个新的VSTS任务名为“的NuGet安装”这可以让你在你的NuGet.config文件查看和指定不同的包的来源。在运行MSBuild之前运行此任务。

如果您使用的是VSTS的NuGet饲料,您将需要生成服务帐户添加到饲料,使包​​

enter image description here

+2

这很好,但是UI已经改变了,现在没有输入配置文件的位置。相反,添加一个NuGet参数“-ConfigFile c:\ MyPath \ ToMy \ NuGet.config” –

0

在Team Foundation Server的2015年的RTM你要的下载添加“NuGet安装程序”类型的构建步骤,然后在运行实际构建过程之前还原解决方案文件的包。在此任务中,您可以传递包含存储库路径的参数-ConfigFile path/to/nuget.config

例如:

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

enter image description here

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

    <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/

HTH

-1

如果你有麻烦这对UWP任务,那么请确保您有正确拼写包名的情况。如果情况不对,那么(仅适用于UWP)我们的构建服务器将无法构建。

举例来说,如果你有一个叫包Com.Company.Components,并使用“安装包com.company.components”(注意首字母的情况下)更新包那么构建服务器上的UWP构建可能无法在本地存储中找到该包。

+0

为什么downvote?这正是导致我们的TFS服务器上的问题 - 我很好奇你为什么认为这是不正确的。 – MercifulGiraffe