Ошибка создания шага VSO NuGet Publisher

Я использую Visual Studio Online - Preview диспетчера пакетов вместе с новой системой сборки. Предварительный просмотр менеджера пакетов добавляет ряд этапов сборки, в том числе шаг "NuGet Publisher", который должен отправить пакеты в частный канал, размещенный в Visual Studio Online.

Теперь документация здесь немного не в ногу. Так же есть документация по токенам авторизации и личного доступа. Есть некоторые признаки того, что вам не нужно выполнять аутентификацию между VSO и диспетчером пакетов, если у вас настроены разрешения (учетная запись службы сборки имеет разрешения для конечной точки службы и для расширения диспетчера пакетов). Фактический шаг сборки просит вас выбрать из списка конечных точек службы, поэтому я попытался это сделать.

Когда я не помещаю учетные данные в конечную точку службы, я получаю сообщение об ошибке:

Server Key must be set, set the password on the generic service

Когда я пытаюсь поместить ключ API в конечную точку службы, кажется, что он сбрасывается при сохранении... и ошибка меняется на:

2015-11-18T08:35:24.5678951Z Invoking nuget with push C:\a\1\s\EventViewer\bin\Release\Project.Name.1.1.12.0.nupkg -s https://example.pkgs.visualstudio.com/DefaultCollection/_packaging/example/nuget/v3/index.json usfusmx4ez6mlfqwpp2abzc7e37denfcp7bxsep2hqij3tp4qwvq on C:\a\1\s\EventViewer\bin\Release\Project.Name.1.1.12.0.nupkg
2015-11-18T08:35:24.5688946Z C:\LR\MMS\Services\Mms\TaskAgentProvisioner\Tools\agents\default\agent\worker\tools\NuGet.exe push C:\a\1\s\EventViewer\bin\Release\Project.Name.1.1.12.0.nupkg -s https://example.pkgs.visualstudio.com/DefaultCollection/_packaging/Example/nuget/v3/index.json usfusmx4ez6mlfqwpp2abzc7e37denfcp7bxsep2hqij3tp4qwvq
2015-11-18T08:35:25.3467312Z Please provide credentials for: https://example.pkgs.visualstudio.com/DefaultCollection/_packaging/Example/nuget/v3/index.json
2015-11-18T08:35:25.3667189Z ##[error]Object reference not set to an instance of an object.
2015-11-18T08:35:25.3677179Z UserName: Password: 
2015-11-18T08:35:25.4647059Z ##[error]Unexpected exit code 1 returned from tool NuGet.exe

Я также пытался использовать личный токен безрезультатно.

Как мне заставить работать шаг публикации?

3 ответа

Решение

Встроенная задача NuGet Publish имеет две опции: "внешние" и "внутренние". Внешние каналы предназначены для сторонних сервисов, таких как NuGet.org, Artifactory, и ожидают подключения к сервису с помощью ключа API.

Внутренние каналы - это те, что размещаются в Team Services. Вместо подключения к службе вы добавляете URL-адрес конечной точки канала NuGet. Система сборки опирается на Службу сборки коллекции проектов (для определений сборки в области сбора) или Службу сборки проекта (для определений сборки в рамках этого проекта), являющуюся Читателем или Участником канала. Документы для всего, что доступно здесь.

ОБНОВЛЕНИЕ: теперь все исправлено, поэтому вы можете использовать стандартные шаги упаковки в vNext, и они работают как шарм.

В настоящее время я заменяю шаг NuGet Publisher этапом сборки PowerShell.

Он вставляется в сборку после шага "NuGet Packager" и позволяет мне указать все учетные данные, настроив источник пакета перед его установкой.

$feedUrl = "https://example.pkgs.visualstudio.com/DefaultCollection/_packaging/Example/nuget/v3/index.json"

$packagePath =  $ENV:BUILD_REPOSITORY_LOCALPATH + "\YourOrg.YourComponent." + $ENV:BUILD_BUILDNUMBER + ".nupkg"

Write-Host "Adding package Source"
$addSourceCommand = $ENV:BUILD_REPOSITORY_LOCALPATH + "\nuget sources add -name ""Example"" -source " + $feedUrl + " -username ""your.username"" -password ""yourpassword"""
Invoke-Expression -Command $addSourceCommand

Write-Host "Pushing package to NuGet"
$pushCommand =  $ENV:BUILD_REPOSITORY_LOCALPATH + "\nuget push $packagePath -Source " + $feedUrl + " -ApiKey Example"
Invoke-Expression -Command $pushCommand

Я попал сюда, потому что я исследую / настраиваю внутреннее развертывание - где я использую свой собственный сервер NuGet (nuget.server, а не визуальную студию онлайн). Ошибка была такой же (или имеет похожий текст):

В экземпляре объекта не задана ссылка на объект

Как оказалось, мое решение заключалось в том, что URL-адрес был неправильным. Правильная версия: http://server-name/NuGet/api/v2/package

Для полноты картины у меня было: http://server-name/NuGet/ что было не так.

Другие вопросы по тегам