从VSTS将nuget包推送到nuget.org时,请忽略重复项

jga*_*fin 2 c# continuous-deployment nuget azure-devops

我在VSTS中建立了一个版本,该版本在存储库中的每次提交时都会触发。一切都很好,只有一个例外。

我们不会在每次提交时发布新版本的nuget软件包。因此,我们的nuget push构建步骤以http状态代码409失败。我已经配置了该步骤,以便无论如何它都可以继续。

由于该错误,构建仅“部分成功”。我正在使用一个构建徽章,该徽章也声明相同(无上下文)。

如何告诉VSTS忽略409或仅替换现有软件包(在nuget.org上)?

Dar*_*iak 6

使用-SkipDuplicate标志(自 NuGet 5.1 起可用):

(5.1+) 如果包和版本已存在,请跳过它并继续推送中的下一个包(如果有)。

来源:https ://learn.microsoft.com/en-us/nuget/reference/cli-reference/cli-ref-push#options

  • 有没有办法在 YAML 文件上使用“-skipDuplicate”? (5认同)

sta*_*SFT 5

您不能忽略VSTS构建中的409错误,也不能替换服务器中的现有软件包。

我建议您可以将软件包推送到发行版中,如果发行包存在,则使发行失败。

另一种方法是,您可以在构建过程中先检查服务器中的程序包,然后再进行推送程序包(例如PowerShell,REST API),并设置推送程序包任务的条件(“自定义条件”)。

例如:

  1. 添加一个变量以建立定义(例如hasPackage true)
  2. 检查软件包(PowerShell,Rest API等…)
  3. 如果程序包已存在,请将变量设置为false(“ ## vso [task.setvariable variable = hasPackage;] false”
  4. 为推送包任务设置自定义条件(例如eq(variables ['hasPackage'],'false'))

更新:

现在,NuGet推送任务支持允许跳过重复项!(只需在NuGet Push任务中选中“ 允许跳过重复项”选项。

  • “允许跳过重复项”选项不适用于 Nuget.org 或任何其他外部 NuGet 服务器。 (2认同)
  • 我们尝试在没有 TFS 2018 的情况下使用“允许跳过重复项”选项。但它似乎不起作用。日志显示:“T12:07:21.8171891Z ##[警告]'允许跳过重复项'选项目前仅在 Visual Studio Team Services 上可用。如果 NuGet.exe 遇到冲突,任务将失败。” 任何的想法? (2认同)