2015-07-13 87 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