Не удается заставить конвейер использовать пользовательский сервер NuGet со сборкой Azure DevOps - PullRequest
0 голосов
/ 29 октября 2018

Мое решение использует пакеты как с официального сервера NuGet, так и с частного сервера NuGet. Я пытаюсь настроить конвейер сборки для восстановления пакетов из обоих местоположений, но продолжаю получать ошибки сборки NuGet restore, когда похоже, что он пытается восстановить мой личный пакет с общедоступного сервера NuGet и, по понятным причинам, терпит неудачу из-за этого.

Я немного растерялся, что еще мне делать. Похоже, что в DevOps Azure нет параметров, которые можно было бы сделать для шага восстановления NuGet, поскольку, похоже, все теперь настроено в файле YAML. Будем благодарны за любые предложения о том, что я могу делать не так или что я могу попробовать.

Мой NuGet.config в моем решении:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageRestore>
    <!-- Allow NuGet to download missing packages -->
    <add key="enabled" value="True" />
    <!-- Automatically check for missing packages during build in Visual Studio -->
    <add key="automatic" value="True" />
  </packageRestore>
  <packageSources>
    <add key="NuGet official package source" value="https://api.nuget.org/v3/index.json" />
    <add key="Private" value="http://privatenuget.net:8080/nuget" />
  </packageSources>
  <activePackageSource>
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
</configuration>

Мой файл YAML, который использует Pipelines:

# ASP.NET
# Build and test ASP.NET projects.
# Add steps that publish symbols, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/aspnet/build-aspnet-4

pool:
  vmImage: 'VS2017-Win2016'

variables:
  solution: 'MyProject.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- task: NuGetToolInstaller@0

- task: NuGetCommand@2
  inputs:
    nugetConfigPath: 'MyProject\NuGet.config'
    restoreSolution: '$(solution)'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: VSTest@2
  inputs:
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

Моя ошибка появляется на шаге сборки NuGetCommand:

The nuget command failed with exit code(1) and error(Errors in packages.config projects
    NU1000: Unable to find version '1.1.5' of package 'MyPackage'.
      https://api.nuget.org/v3/index.json: Package 'MyPackage' is not found on source 'https://api.nuget.org/v3/index.json'.)
Packages failed to restore

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Я только что столкнулся с этой проблемой, но в моем проекте не было файла NuGet.config, и я не хотел добавлять его. Использование NuGet.config требует от вас хранить личный токен доступа (PAT) в виде открытого текста, что, по меньшей мере, не идеально, особенно если оно передается в ваше хранилище вместе с вашим проектом.

После долгих исследований я нашел почти идеальное решение. Используя группы переменных в DevOps Azure, вы можете добавлять переменные (и секреты), которые можно сделать доступными для всех ваших конвейеров. Мне пришло в голову, что я могу поместить весь NuGet.config в секрет там (вместе с PAT), а затем передать его в настоящий файл NuGet.config как часть конвейера.

У вас уже есть файл NuGet.config, но в случае, если кто-то еще воспользуется этим и начнет с нуля, вам потребуется следующее:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="MyPrivateFeed" value="*** PRIVATE FEED URL HERE ***" />
  </packageSources>
  <packageSourceCredentials>
    <MyPrivateFeed>
      <add key="Username" value="anything" />      
      <add key="ClearTextPassword" value="*** PAT HERE ***" />
    </MyPrivateFeed>
  </packageSourceCredentials>
</configuration>

Введите URL своего канала и PAT, а затем скопируйте все и вставьте в переменную с именем «NuGet.config» в группе переменных. Нажмите значок блокировки на переменной, чтобы сделать ее секретной. Переменная может быть названа как угодно, но вам нужно обновить ее в приведенном ниже коде, если вы используете что-то другое.

Затем вам просто нужно включить вашу группу переменных:

variables:
  - group: my-variable-group

И добавьте следующее к своему конвейерному yaml перед любыми другими шагами, которые будут использовать частный канал (например, dotnet build).

- bash: echo -e '$(NuGet.config)' > NuGet.config
  displayName: Create NuGet.config
0 голосов
/ 30 октября 2018

Вы можете начать с пустого задания и не использовать существующий YAML. Затем вы можете настроить свои агенты / задачи (восстановление Nuget и т. Д.) Для создания приложения.

New build

Empty job

...