如何获取 TFS2015 Build (Build.vnext) 和 NuGet 包还原以使用自定义包源
How to get TFS2015 Build (Build.vnext) and NuGet package restore to use custom package sources
我正在尝试让我们的 TFS2015 Build (TFSBuild vnext) 与 VS Team Services 一起使用。
到目前为止,大多数 blogs and documentation 都有帮助,但尝试构建一个使用自定义包源进行 NuGet 自动包恢复的项目时除外。
我已经成功部署了一个 Team Services Build Agent(新的构建机制)并且一切似乎都很顺利,直到恢复 NuGet 包的构建任务失败。
失败是由于 custom/private 包源未从已安装的 VS 配置中获取,因此无法找到这些包。来自默认 NuGet 包提要的传统包确实可以毫无问题地恢复。
如何在使用代理时为 NuGet 指定额外的包源?
编辑:vcastro 询问了 NuGet 安装程序构建步骤和在该构建步骤的配置中定义路径。以上是使用 Visual Studio 构建步骤和集成选项来让 NuGet 恢复包。请参考此图片以供参考:
我在网上搜寻但收效甚微,但在摆弄以下内容后会有所帮助:
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
(或实际用户)帐户。
向您的项目添加一个 NuGet.config 以指定备用包位置。解析规则在官方documentation.
中有明确的定义和解释
或者,您也可以在构建配置中的 Visual Studio Build
步骤之前添加一个 NuGet Installer
构建步骤,以恢复所有 NuGet 包。
在那里你可以将你的私人仓库的位置作为参数传递给 nuget.exe
:
-source "https://www.nuget.org/api/v2/;http://mynugetserver"
一个解决方案(对我有用)是将 tfs 2015 构建代理服务(在我的构建机器 VSO Agent tsf.Agent-PC 上)的帐户更改为 tfsagent,例如,并将 Nuget.config 添加到C:\Users\tfsagent\AppData\Roaming\Nuget。就这些!
有一个名为 "NuGet Installer" 的新 VSTS 任务,它允许您签入 NuGet.config 文件并指定不同的包源。 运行 您之前的任务 运行 MSBuild。
如果您使用的是 VSTS NuGet Feed,则需要将构建服务帐户添加到 Feed 以启用包下载 https://www.visualstudio.com/get-started/package/use/common-identities
在 Team Foundation Server 2015 的 RTM 中,您必须添加 "NuGet Installer" 类型的构建步骤,并在 运行 实际构建过程之前恢复解决方案文件的包。在此任务中,您可以传递包含您的存储库路径的参数 -ConfigFile path/to/nuget.config
。
例如:
<configuration>
<packageSources>
<add key="Internal Nuget" value="\srv-nuget\Repo" />
</packageSources>
</configuration>
在解决方案的 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 脚本中的代码片段:
Arguments:
$(MyCompanyNugetUser) $(MyCompanyNugetPwd)
Script:
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
接下来,我们继续从微软的模板中执行默认的NuGet Restore步骤
更多信息:https://codingcase.com/2016/07/27/vsts-build-setup-custom-nuget-feeds-with-authentication/
HTH
如果您无法使其仅在 UWP 上运行,请确保您的包名称的 CASE 拼写正确。如果大小写错误,那么(仅适用于 UWP)我们的构建服务器会导致构建失败。
例如,如果您有一个名为 Com.Company.Components 的包并使用 "install-package com.company.components" 更新包(请注意首字母的大小写),那么构建服务器上的 UWP 构建可能无法在您的本地商店中找到该包。
我正在尝试让我们的 TFS2015 Build (TFSBuild vnext) 与 VS Team Services 一起使用。
到目前为止,大多数 blogs and documentation 都有帮助,但尝试构建一个使用自定义包源进行 NuGet 自动包恢复的项目时除外。
我已经成功部署了一个 Team Services Build Agent(新的构建机制)并且一切似乎都很顺利,直到恢复 NuGet 包的构建任务失败。
失败是由于 custom/private 包源未从已安装的 VS 配置中获取,因此无法找到这些包。来自默认 NuGet 包提要的传统包确实可以毫无问题地恢复。
如何在使用代理时为 NuGet 指定额外的包源?
编辑:vcastro 询问了 NuGet 安装程序构建步骤和在该构建步骤的配置中定义路径。以上是使用 Visual Studio 构建步骤和集成选项来让 NuGet 恢复包。请参考此图片以供参考:
我在网上搜寻但收效甚微,但在摆弄以下内容后会有所帮助:
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
(或实际用户)帐户。
向您的项目添加一个 NuGet.config 以指定备用包位置。解析规则在官方documentation.
中有明确的定义和解释或者,您也可以在构建配置中的 Visual Studio Build
步骤之前添加一个 NuGet Installer
构建步骤,以恢复所有 NuGet 包。
在那里你可以将你的私人仓库的位置作为参数传递给 nuget.exe
:
-source "https://www.nuget.org/api/v2/;http://mynugetserver"
一个解决方案(对我有用)是将 tfs 2015 构建代理服务(在我的构建机器 VSO Agent tsf.Agent-PC 上)的帐户更改为 tfsagent,例如,并将 Nuget.config 添加到C:\Users\tfsagent\AppData\Roaming\Nuget。就这些!
有一个名为 "NuGet Installer" 的新 VSTS 任务,它允许您签入 NuGet.config 文件并指定不同的包源。 运行 您之前的任务 运行 MSBuild。
如果您使用的是 VSTS NuGet Feed,则需要将构建服务帐户添加到 Feed 以启用包下载 https://www.visualstudio.com/get-started/package/use/common-identities
在 Team Foundation Server 2015 的 RTM 中,您必须添加 "NuGet Installer" 类型的构建步骤,并在 运行 实际构建过程之前恢复解决方案文件的包。在此任务中,您可以传递包含您的存储库路径的参数 -ConfigFile path/to/nuget.config
。
例如:
<configuration>
<packageSources>
<add key="Internal Nuget" value="\srv-nuget\Repo" />
</packageSources>
</configuration>
在解决方案的 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 脚本中的代码片段:
Arguments:
$(MyCompanyNugetUser) $(MyCompanyNugetPwd)
Script:
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
接下来,我们继续从微软的模板中执行默认的NuGet Restore步骤
更多信息:https://codingcase.com/2016/07/27/vsts-build-setup-custom-nuget-feeds-with-authentication/
HTH
如果您无法使其仅在 UWP 上运行,请确保您的包名称的 CASE 拼写正确。如果大小写错误,那么(仅适用于 UWP)我们的构建服务器会导致构建失败。
例如,如果您有一个名为 Com.Company.Components 的包并使用 "install-package com.company.components" 更新包(请注意首字母的大小写),那么构建服务器上的 UWP 构建可能无法在您的本地商店中找到该包。