我正在尝试将我们的TFS2015 Build(TFSBuild vnext)与VS Team Services一起使用。
到目前为止,大多数blogs and documentation都有帮助,除了在尝试构建使用自定义包源进行NuGet自动包恢复的项目时。
我已经成功部署了一个团队服务构建代理(构建的新机制),并且在恢复NuGet包的构建任务失败之前似乎一切顺利。
失败是由于未从已安装的VS配置中获取自定义/私有包源,因此找不到这些包。默认NuGet包源中的传统包确实可以正常恢复。
如何指定NuGet在使用代理时使用的其他包源?
编辑:vcastro询问了NuGet Installer构建步骤,并在该构建步骤的配置中定义了路径。以上是使用Visual Studio Build步骤和集成选项来使NuGet恢复包。请参阅此图片以供参考:
答案 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配置,我不得不使用以下路径:
C:\Windows\SysWOW64\config\systemprofile\AppData\Roaming\NuGet\NuGet.Config
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
答案 4 :(得分:2)
一个解决方案(适用于我)是将tfs 2015构建代理服务(在我的构建计算机VSO代理tsf.Agent-PC上)更改为tfsagent,例如,并将Nuget.config添加到C:\ Users \ tfsagent \应用程序数据\漫游\的NuGet。这就是全部!
答案 5 :(得分: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" />
创建用户名&amp; VSTS中构建定义中的密码变量。变量可以加密,不会显示在任何构建日志输出中。在这里,我将创建 MyCompanyNugetUser 和 MyCompanyNugetPwd 变量。
在我们的构建步骤中,我们添加了一个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
接下来,我们继续执行Microsoft模板中的默认NuGet Restore步骤
更多信息: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>
答案 7 :(得分:-1)
如果您无法在UWP上进行此操作,请确保您正确拼写了包名称的CASE。如果情况有误,那么(仅适用于UWP)我们的构建服务器无法构建。
例如,如果您有一个名为 Com.Company.Components 的软件包,请使用“install-package com.company更新软件包。组件 “(请注意首字母大小写的情况)然后构建服务器上的UWP构建可能无法在本地存储中找到该包。