【问题标题】:how do I use "nuget push" with the --skip-duplicate option in task DotNetCoreCLI@2如何在任务 DotNetCoreCLI@2 中使用“nuget push”和 --skip-duplicate 选项
【发布时间】:2020-06-10 14:12:54
【问题描述】:

在 Azure DevOps 中,我想使用 dotnet core CLI 任务来推送带有 --skip-duplicate 选项集的包。我该怎么做?

我尝试设置arguments: --skip-duplicate,但这并没有反映在执行的命令中。

我尝试使用 custom: nuget push 自定义命令,但这表明 nuget push 不是有效的自定义命令。

如何使 DotNetCorCLI@2 任务执行 dotnet nuget push <pathspec> --skip-duplicate(同时将 --source 选项设置为内部包源)

【问题讨论】:

    标签: azure azure-devops


    【解决方案1】:

    我有同样的问题。我设法以这种方式修复它:

    - task: NuGetAuthenticate@0
    - script: dotnet nuget push --api-key az --skip-duplicate --source https://pkgs.dev.azure.com/{organization}/{project?}/_packaging/{feed1}/nuget/v3/index.json *.nupkg
      workingDirectory: $(Build.ArtifactStagingDirectory)
    

    当然,将 {organization} 替换为您在 azure 中的组织名称。

    {project?} 如果您的提要是组织范围的并且 {feed1} 是您的 nuget 提要名称。

    默认情况下,NuGetAuthenticate 任务将对 azure 中的所有提要进行身份验证。 要在 Azure 提要之外进行身份验证,请查看 official docs

    更新

    如果 nuget push 随机失败并出现 401,则可以接受的解决方法是将这些变量添加到您的 yaml,如建议的 here

    variables:
      NUGET_PLUGIN_REQUEST_TIMEOUT_IN_SECONDS: '30'
      NUGET_PLUGIN_HANDSHAKE_TIMEOUT_IN_SECONDS: '30'
    

    【讨论】:

    • 在 Azure Devops 中修复重复 NuGet 的一种更糟糕的方法是添加 allowPackageConflicts: true
    【解决方案2】:

    尝试使用custom: nuget 并将push 放入参数中。检查以下语法:

    steps:
    - task: DotNetCoreCLI@2
      displayName: 'dotnet nuget push'
      inputs:
        command: custom
        custom: nuget
        arguments: 'push *.nupkg -s https://pkgs.dev.azure.com/xxxx/_packaging/xxx/nuget/v3/index.json --skip-duplicate'
    

    【讨论】:

    • 内部提要出现 401 失败
    • 这是另一个问题,this documentation 表示:dotnet nuget push 命令将一个包推送到服务器并发布它。 push 命令使用系统的 NuGet 配置文件或配置文件链中的服务器和凭据详细信息。因此,应在 NuGet.config 文件中添加 NuGet 包凭据和 API 密钥。在这种情况下检查答案:stackoverflow.com/questions/48068329/…
    • 这行得通。我认为这应该被标记为答案。
    • 我想知道是否有更直接的方法可以在构建管道中使用跳过重复项。我不想解决 401 错误。说实话,我有点失望,这个程序显然不是很成熟。。
    【解决方案3】:

    您应该能够使用 nuget authenticate 和 nuget push 而不是 dotnet core CLI。它还有更多功能

    - task: NuGetAuthenticate@0
      displayName: 'NuGet Authenticate'
    - task: NuGetCommand@2
      displayName: 'NuGet push'
      inputs:
        packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg'
        command: push
        feedsToUse: 'select'
        publishVstsFeed: 'feedname'
        allowPackageConflicts: true
    

    【讨论】:

    • 我一直在不同的做事方式之间来回走动。我不记得为什么 NugetCommand 不能做我想做的事。我再试一次。
    • afaik nuget authenticate 同时被弃用。你现在开始工作了吗?您使用的是 .yaml 配置还是经典配置?
    猜你喜欢
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 2020-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 2021-11-05
    相关资源
    最近更新 更多