使用一个命令将多个包推送到私有NuGet(VSTS)中

7

我要一次性将多个NuGet包推送到私有的VSTS NuGet服务器。

我查阅了文档,但没有找到批处理推送命令。我使用了下面的命令,它似乎会覆盖VSTS上已经存在的NuGet包。

nuget push mynuget.nupkg -Source https://myvsts.pkgs.visualstudio.com/DefaultCollection/_packaging/SitecorePackages/nuget/v3/index.json -ApiKey VSTS

更新:

我使用了push *.nupkg,但是我只能看到8.1.x版本被推送。

进入图像描述

谢谢。

3个回答

7

无法在VSTS上覆盖现有软件包。nuget.exe允许使用通配符进行推送,因此您可以使用nuget push *.nupkg -Source https://myvsts.pkgs.visualstudio.com/DefaultCollection/_packaging/SitecorePackages/nuget/v3/index.json -ApiKey VSTS


谢谢@MattCooper,但是当我尝试使用*.nupkg时,它显示错误消息“无法处理请求:'冲突'。远程服务器返回409冲突...” - Nil Pun
这是因为不可能覆盖相同的软件包ID + 版本。请参阅关于不变性的主题。 - Matt Cooper
好的,我删除并发布了两个带有*.nupkg的包。然而,我只能看到最后一个。不知何故,最后一个似乎覆盖了第一个。请参考原帖附上的屏幕截图。 - Nil Pun
3
最近,nuget push 命令增加了“-SkipDuplicate”参数以允许此功能工作。 - Scott Stafford

7

这里是一个PowerShell脚本,可以用来批量推送NuGet包到VSTS feed。它会忽略任何以.symbols.nuget结尾的文件:

set-location \\path\to\nugetpackages

$files=get-childitem | where {$_.Name -like "*.nupkg" -and $_.Name -notlike "*symbols*"}

foreach($file in $files) {
  .\NuGet.exe push -Source "MySource" -ApiKey key $file.name
}

6

首先,我从“packages”文件夹中排除以前上传的软件包,它只包含本地服务器上不存在的软件包。之后,我使用下面的命令,它能够正常工作。

nuget.exe push -Source "MyFeedName" -ApiKey VSTS packages\**\*.nupkg

2
我刚刚使用了相同的技术,将所有内容从旧服务器批量推送到新服务器 - **通配符执行递归文件夹搜索,对此非常简单和有用。 - Andy Hames
反斜杠很重要。我大多数时候使用正斜杠,因为它适用于所有平台,但在Windows上会失败:packages/**/*.nupkg - pauldendulk
您还可以使用Azure CLI的“-SkipDuplicate”选项来跳过已经上传的软件包。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接