[英]How to get TFS2015 Build (Build.vnext) and NuGet package restore to use custom package sources
我正在尝试将我们的TFS2015 Build( TFSBuild vnext )与VS Team Services一起使用。
到目前为止,大多数博客和文档都很有用,除了在尝试构建使用自定义包源来进行NuGet自动包恢复的项目时。
我已经成功部署了一个Team Services Build Agent(新的构建机制),并且在恢复NuGet包的构建任务失败之前似乎一切顺利。
失败的原因是未从已安装的VS配置中获取自定义/私有包源,因此无法找到这些包。 默认NuGet包Feed中的传统包确实可以正常恢复。
如何在使用代理时指定NuGet使用的其他包源?
编辑:vcastro询问了NuGet Installer构建步骤,并在该构建步骤的配置中定义了路径。 以上是使用Visual Studio Build步骤和集成选项来使NuGet恢复包。 参考此图片以供参考:
或者,您也可以在构建配置中的Visual Studio Build
步骤之前添加NuGet Installer
构建步骤,以还原所有NuGet包。
在那里,您可以将私有nuget.exe
的位置作为参数传递给nuget.exe
:
-source "https://www.nuget.org/api/v2/;http://mynugetserver"
我在网上搜索得不太成功,但在摆弄以下内容后会有所帮助:
OK似乎为NuGet.config配置的包源是按用户帐户存储的,例如
c:\\Users\\<<username>>\\AppData\\Roaming\\NuGet\\NuGet.config
我的问题难以解决,因为构建代理在Local System
帐户下作为Windows Service
运行。 因此,要为构建获取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
(或实际用户)帐户。
将NuGet.config添加到项目中,以指定备用包位置。 解决规则的定义很明确,并在官方文件中进行了解释。
有一个名为“NuGet Installer”的新VSTS任务,它允许您签入NuGet.config文件并指定不同的包源。 在运行MSBuild之前运行此任务。
如果您使用的是VSTS NuGet Feed,则需要将构建服务帐户添加到源以启用软件包下载https://www.visualstudio.com/get-started/package/use/common-identities
一个解决方案(适用于我)是将tfs 2015构建代理服务(在我的构建机器VSO代理tsf.Agent-PC上)更改为tfsagent,并将Nuget.config添加到C:\\ Users \\ tfsagent \\ AppData \\漫游\\的NuGet。 就这样!
在解决方案的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" />
在VSTS中的构建定义中创建用户名和密码变量。 变量可以加密,不会显示在任何构建日志输出中。 在这里,我将创建MyCompanyNugetUser和MyCompanyNugetPwd变量。
在我们的构建步骤中,我们添加一个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
接下来,我们继续从Microsoft的模板执行默认的NuGet Restore步骤
更多信息: https : //codingcase.com/2016/07/27/vsts-build-setup-custom-nuget-feeds-with-authentication/
HTH
在Team Foundation Server 2015的RTM中,您必须添加“NuGet Installer”类型的构建步骤,并在运行实际构建过程之前还原Solution文件的包。 在此任务中,您可以将参数-ConfigFile path/to/nuget.config
传递-ConfigFile path/to/nuget.config
包含存储库路径的-ConfigFile path/to/nuget.config
。
例如:
<configuration>
<packageSources>
<add key="Internal Nuget" value="\\srv-nuget\Repo" />
</packageSources>
</configuration>
如果您无法在UWP上进行此操作,请确保您正确拼写了包名称的CASE。 如果情况有误,那么(仅适用于UWP)我们的构建服务器无法构建。
例如,如果您有一个名为Com.Company.Components的包并使用“install-package com.company.components ”更新包(请注意首字母的大小写),那么构建服务器上的UWP构建可能无法找到您当地商店的包裹。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.