6

我正在使用 Visual Studio Online - Package Manager Preview 以及新的构建系统。包管理器预览添加了许多构建步骤,包括“NuGet Publisher”步骤,该步骤应将包推送到 Visual Studio Online 托管的私有源。

现在这里的文档有点不合时宜。就像关于 auth个人访问令牌的文档一样。有一些迹象表明,只要您设置了权限(构建服务帐户对服务端点和包管理器扩展具有权限),就不需要在 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

我也尝试使用个人访问令牌无济于事。

如何使发布步骤正常工作?

4

3 回答 3

4

内置 NuGet 发布任务有两个选项:“外部”源和“内部”源。外部源适用于 NuGet.org、Artifactory 等 3rd 方服务,并期望与 API 密钥建立服务连接。

内部订阅源是由 Team Services 托管的订阅源。添加源的 NuGet 终结点的 URL,而不是服务连接。构建系统依赖于项目集合构建服务(对于集合范围的构建定义)或项目构建服务(对于“此项目”范围的构建定义)作为提要的读者或贡献者。此处提供的所有文档。

于 2015-11-19T16:44:48.370 回答
3

更新:现在一切都已修复,因此您可以使用 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
于 2015-11-18T14:27:50.887 回答
0

我来到这里是因为我正在研究/配置内部部署——我在其中运行我自己的 NuGet 服务器(nuget.server,而不是 Visual Studio Online)。错误是相同的(或具有相似的文本):

你调用的对象是空的

事实证明,我的解决方案是 URL 不正确。正确的版本是:http://server-name/NuGet/api/v2/package

为了完整起见,我有:http://server-name/NuGet/这是错误的。

于 2016-12-12T20:11:08.217 回答