TFS2015 Build( TFSBuild vnext )をVS Team Servicesと一緒に取得しようとしています。
これまでのところ、ほとんどの ブログとドキュメント が役に立ちました。ただし、NuGet自動パッケージ復元用のカスタムパッケージソースを使用するプロジェクトをビルドしようとする場合を除きます。
Team Servicesビルドエージェント(ビルドの新しいメカニズム)を正常に展開しましたが、NuGetパッケージを復元するビルドタスクが失敗するまで、すべてうまくいくようでした。
失敗は、インストールされたVS構成からカスタム/プライベートパッケージソースが取得されなかったため、それらのパッケージが見つかりませんでした。デフォルトのNuGetパッケージフィードからの従来のパッケージは、問題なく復元されました。
エージェントを使用するときに使用するNuGetの追加パッケージソースを指定するにはどうすればよいですか?
編集:vcastroは、NuGet Installerのビルドステップについて尋ね、そのビルドステップの構成でパスを定義しました。上記では、Visual Studioのビルドステップと統合オプションを使用して、NuGetがパッケージを復元します。参考のためにこの画像を参照してください。
私はほとんど成功せずにWebをざっと見ましたが、いじくり回した後は次のことが役立ちます。
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
(または実際のユーザー)アカウントでのみ機能します。
または、ビルド構成のNuGet Installer
ステップの前にVisual Studio Build
ビルドステップを追加して、すべてのNuGetパッケージを復元することもできます。
そこで、nuget.exe
への引数としてプライベートリポジトリの場所を渡すことができます。
-source "https://www.nuget.org/api/v2/;http://mynugetserver"
「NuGet Installer」と呼ばれる新しいVSTSタスクがあります。これにより、NuGet.configファイルをチェックインして、さまざまなパッケージソースを指定できます。 MSBuildを実行する前に、このタスクを実行してください。
VSTS NuGetフィードを使用している場合は、ビルドサービスアカウントをフィードに追加して、パッケージのダウンロードを有効にする必要があります https://www.visualstudio.com/get-started/package/use/common-identities
別のパッケージの場所を指定するNuGet.configをプロジェクトに追加します。解決の規則は明確に定義されており、公式の documentation で説明されています。
1つの解決策(私にとってはうまくいきます)は、たとえば、tfs 2015ビルドエージェントサービス(私のビルドマシンVSOエージェントtsf.Agent-PC)のアカウントをtfsagentに変更し、Nuget.configをC:\ Users\tfsagent\AppDataに追加することです\ Roaming\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」タイプのビルドステップを追加し、実際のビルドプロセスを実行する前にソリューションファイルのパッケージを復元する必要があります。タスクには、リポジトリパスを含む引数-ConfigFile path/to/nuget.config
を渡すことができます。
例えば:
<configuration>
<packageSources>
<add key="Internal Nuget" value="\\srv-nuget\Repo" />
</packageSources>
</configuration>