Подтвердить что ты не робот

Как получить восстановление TFS2015 Build (Build.vnext) и NuGet для использования пользовательских источников пакетов

Я пытаюсь получить нашу сборку TFS2015 (TFSBuild vnext) вместе с VS Team Services.

До сих пор большинство блогов и документации были полезны, за исключением случаев, когда пытались создать проект, который использует собственные источники пакетов для автоматического восстановления пакета NuGet.

Я успешно развернул агент сборки Team Services (новый механизм для сборки), и все, казалось, прошли хорошо, пока не завершилась задача сборки для восстановления пакетов NuGet.

Ошибка произошла из-за того, что пользовательский/частный пакет не был выбран из установленной конфигурации VS, поэтому эти пакеты не были найдены. Традиционные пакеты из пакета пакетов NuGet по умолчанию действительно восстанавливались без проблем.

Как указать дополнительные источники пакетов для NuGet для использования при использовании агента?

EDIT: vcastro спрашивает о шаге сборки установщика NuGet и определяет пути в конфигурации этого шага сборки. Вышеописанный шаг построения Visual Studio и встроенный параметр для восстановления пакетов NuGet. См. Это изображение для справки: http://i.imgur.com/Hrqhhk2.png

4b9b3361

Ответ 1

Я немного искал веб-сайт, но после ворчания следующее поможет:

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 (или фактического пользователя).

Ответ 2

В качестве альтернативы вы также можете добавить шаг сборки NuGet Installer перед шагом Visual Studio Build в конфигурации сборки, чтобы восстановить все пакеты NuGet.

Здесь вы можете передать местоположение своего частного репо в качестве аргумента в nuget.exe:

-source "https://www.nuget.org/api/v2/;http://mynugetserver"

Ответ 3

Добавьте в проект NuGet.config, который указывает альтернативное расположение пакета. Правила разрешения четко определены и разъяснены в официальной документации .

Ответ 4

Существует новая задача VSTS под названием "NuGet Installer", это позволяет вам проверить файл NuGet.config и указать различные источники пакетов. Запустите эту задачу перед запуском MSBuild.

Если вы используете VSTS NuGet Feed, вам нужно будет добавить учетную запись сборки в фид, чтобы разрешить загрузку пакетов https://www.visualstudio.com/get-started/package/use/common-identities

введите описание изображения здесь

Ответ 5

Одним из решений (работает для меня) является учетная запись изменения для службы агента сборки tfs 2015 (на моей машине VSO Agent tsf.Agent-PC), например, для tfsagent и добавления Nuget.config в C:\Users\tfsagent\AppData\Roaming\NuGet. Это все!

Ответ 6

  • Укажите свои пользовательские URL-адреса каналов NuGet в файле решений nuget.config. Не сохраняйте имена пользователей и пароли в этом файле.

    <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 script в качестве первого действия, это будет читать переменные имени пользователя и пароля и обновлять файл nuget.config уровня пользователя на машине сборки. Ниже приведен фрагмент кода моего встроенного Powershell script:

    Аргументы:

    $(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 по умолчанию из шаблонов Microsoft

Подробнее здесь: https://codingcase.com/2016/07/27/vsts-build-setup-custom-nuget-feeds-with-authentication/

НТН

Ответ 7

В RTM Team Foundation Server 2015 вам необходимо добавить шаг сборки типа "установщик NuGet" и восстановить пакеты файла Solution до запуска реального процесса сборки. В этой задаче вы можете передать аргумент -ConfigFile path/to/nuget.config, который содержит ваш путь к репозиторию.

Пример:

<configuration>
  <packageSources>
    <add key="Internal Nuget" value="\\srv-nuget\Repo" />
  </packageSources>
</configuration>

введите описание изображения здесь

Ответ 8

Если у вас возникли проблемы с тем, чтобы это работало только с UWP, убедитесь, что у вас правильно написано имя пакета. Если случай неправильный, то (только для UWP) наш сервер сборки не выполняет сборку.

например, если у вас есть пакет под названием Com.Company.Components и обновите пакет, используя "install-package com.company.components" (обратите внимание на случай начальной буквы), то сборка UWP на сервере сборки может не найти пакет в вашем локальном хранилище.