簡體   English   中英

如何獲取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一起使用。

到目前為止,大多數博客和文檔都很有用,除了在嘗試構建使用自定義包源來進行NuGet自動包恢復的項目時。

我已經成功部署了一個Team Services Build Agent(新的構建機制),並且在恢復NuGet包的構建任務失敗之前似乎一切順利。

失敗的原因是未從已安裝的VS配置中獲取自定義/私有包源,因此無法找到這些包。 默認NuGet包Feed中的傳統包確實可以正常恢復。

如何在使用代理時指定NuGet使用的其他包源?

編輯:vcastro詢問了NuGet Installer構建步驟,並在該構建步驟的配置中定義了路徑。 以上是使用Visual Studio Build步驟和集成選項來使NuGet恢復包。 參考此圖片以供參考: http://i.imgur.com/Hrqhhk2.png

或者,您也可以在構建配置中的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配置,我必須使用以下路徑:

  • 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添加到項目中,以指定備用包位置。 解決規則的定義很明確,並在官方文件中進行了解釋。

有一個名為“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。 就這樣!

  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. 接下來,我們繼續從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM