【问题标题】:Ignore duplicates when pushing nuget package to nuget.org from VSTS从 VSTS 将 nuget 包推送到 nuget.org 时忽略重复项
【发布时间】:2018-02-17 07:19:49
【问题描述】:

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

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

由于错误,构建只是“部分成功”。我正在使用同样声明的构建徽章(没有上下文)。

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

【问题讨论】:

  • 现在 NuGet 推送任务支持允许跳过重复项! (我更新了我的答案)

标签: c# nuget azure-devops continuous-deployment


【解决方案1】:

我们在 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'

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 有没有办法在 YAML 文件中使用-skipDuplicate
    • 我现在也在寻找相同的skipDuplicate
    【解决方案3】:

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

    【讨论】:

    • 从 dotnetcore 推送任务中删除它的任何原因?谢谢
    • “允许跳过重复项”选项不适用于 Nuget.org 或任何其他外部 NuGet 服务器。
    • 我们尝试在 TFS 2018 中使用“允许跳过重复项”选项。但它似乎不起作用。日志显示:“T12:07:21.8171891Z ##[警告]‘允许跳过重复项’选项目前仅在 Visual Studio Team Services 上可用。如果 NuGet.exe 遇到冲突,任务将失败。”有什么想法吗?
    • @Neo 很遗憾没有。
    猜你喜欢
    • 2021-04-15
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多