3

在 Windows Server 2019 代理上运行的 Azure DevOps Server(版本 2019.0.1)中,为 NuGet 推送任务选择了“允许跳过重复项”选项,将显示一条警告:

“允许跳过重复项”选项目前仅在 Azure Pipelines 上可用。如果 NuGet.exe 遇到冲突,任务将失败。

该任务导致以下错误,该错误导致任务失败,表明上述警告适用:

响应状态代码未指示成功:409(冲突 - 提要已包含“MyPackage XYZ”。(DevOps 活动 ID:1A57312F-3C56-4E4D-9E78-73C7072A288F))。

我想知道这个问题是否特定于 Azure DevOps Server(而不是 Azure DevOps Services),或者我做错了什么,或者是否有其他解决方法。我注意到其他人在另一个问题的评论中遇到了同样的问题,其中提到在有人询问如何忽略错误 409(重复包)后该选项可用。

我想忽略使用 NuGet 任务的重复包,理想情况下是 Azure DevOps Server 上的“允许跳过重复”选项。我知道可以使用脚本来解决它,但如果可能的话,我宁愿避免这种情况。任何帮助表示赞赏。

4

3 回答 3

4

如果您使用的是NuGetCommand@2Azure Pipelines 任务,则可以使用该allowPackageConflicts参数。

allowPackageConflicts

即使您的某些包因 409 冲突错误而被拒绝,它也允许任务报告成功。此选项当前仅在 Azure Pipelines 上可用并使用 Windows 代理。如果 NuGet.exe 遇到冲突,任务将失败。如果您在代理环境中,此选项将不起作用并且发布将失败。

https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/package/nuget

于 2020-04-22T07:59:44.990 回答
3

如果您切换到 azure 管道(这似乎是一种新的做事方式),您可以使用 dotnet 命令。该选项--skip-duplicate将在 dotnet core 3.1(仍处于预览状态)中用于该dotnet nuget push命令(无需使用 NuGet 命令,因为它已在 dotnet 中可用)。但是,如果您安装了最新的 .NET Core,您现在就可以使用它。

例如,这是一个阶段,它将抓取您在特定文件夹中获得的任何 nuGet,安装支持跳过重复项的最新 dotnet 核心并将其推送到存储库提要。

- stage:
  displayName: 'Release'
  condition: succeeded()
  jobs:
    - job: 'Publish'
      displayName: 'Publish nuGet Package'
      steps:
        - download: current
          artifact: $(PIPELINE_ARTIFACT_NAME)
          displayName: 'Download pipeline artifact'
        - script: ls $(PATH_PIPELINE_ARTIFACT_NAME)
          displayName: 'Display contents of downloaded articacts path'
        - task: NuGetAuthenticate@0
          displayName: 'Authenticate in NuGet feed'
        - task: UseDotNet@2
          displayName: 'Use .NET Core sdk 3.1 (preview)'
          inputs:
            packageType: sdk
            version: '3.1.100-preview2-014569'
            installationPath: $(Agent.ToolsDirectory)/dotnet
        - script: dotnet nuget push $(PATH_PIPELINE_ARTIFACT_NAME)/**/*.nupkg --source $(NUGET_FEED) --api-key $(NUGET_API_KEY) --skip-duplicate
          displayName: 'Uploads nuGet packages'
于 2019-11-10T09:07:32.853 回答
3

我不知道 Azure DevOps 任务,但如果你升级到 nuget.exe 5.1,你可以使用新-SkipDuplicate选项。这应该适用于正确实现 NuGet 协议的任何 NuGet 服务器以及任何 CI 服务器/代理。

于 2019-07-01T16:27:50.073 回答