繁体   English   中英

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

[英]Ignore duplicates when pushing nuget package to nuget.org from VSTS

我在 VSTS 中构建了一个在存储库中的每次提交时都会触发的构建。 除了一个例外,一切都很好。

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

由于错误,构建只是“部分成功”。 我正在使用构建徽章,它也说明了相同的内容(没有上下文)。

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

您不能忽略 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 推送任务中选中允许跳过重复项选项。

使用-skipDuplicate标志(从 NuGet 5.1 开始可用):

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

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

我们在 Azure Pipelines 上遇到重复包的问题。

starian chen-MSFT 提出的解决方案很酷,但它需要一些脚本。

我们找到了需要更少努力的解决方案。 您可以创建命令行步骤并使用以下参数调用 dotnet nuget push:

dotnet nuget push $(Build.ArtifactStagingDirectory)/*.nupkg --skip-duplicate --api-key $(Config.NuGetApiKey) --source https://api.nuget.org/v3/index.json

关键是参数 --skip-duplicate 如果它们已经存在,它只会跳过包。

在变量 $(Config.NuGetApiKey) 中定义 NuGet.org 的 API 密钥。 你应该让它成为秘密变量,这样它就不会出现在日志中的任何地方。

这是此命令的 YAML:

steps:
- script: |
   dotnet nuget push $(Build.ArtifactStagingDirectory)/*.nupkg --skip-duplicate --api-key $(Config.NuGetApiKey) --source https://api.nuget.org/v3/index.json
   
  failOnStderr: true
  displayName: 'Publish NuGet Package'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM