【问题标题】:Publish Nuget Package using Azure Devops使用 Azure Devops 发布 Nuget 包
【发布时间】:2019-03-26 00:33:36
【问题描述】:

我正在尝试在 Azure DevOps 中创建一个发布管道,它将一个包发布到 Nuget.org。构建管道工作得很好,并将包创建为构建工件。我可以发布到 Azure Artifacts 中托管的提要,但我无法发布到 Nuget.org。我相信问题出在服务连接上。 .

我尝试过使用 ApiKey 但会引发错误

DotNet Core 不支持加密的 API Key 错误

这是尝试推送包的发布步骤。

我也尝试过 https://api.nuget.org/v3/index.json 作为 Feed 网址,但这似乎没有什么不同。

日志输出。

2018-10-21T23:27:36.3177322Z ##[section]开始:Nuget Push 2018-10-21T23:27:36.3183449Z ======================================= ======================================= 2018-10-21T23:27:36.3183547Z 任务:.NET Core 2018-10-21T23:27:36.3183635Z 描述:构建、测试、打包或发布 dotnet 应用程序,或运行自定义 dotnet 命令。对于包命令,支持 NuGet.org 和经过身份验证的源,如包管理和 MyGet。 2018-10-21T23:27:36.3183729Z 版本:2.141.0 2018-10-21T23:27:36.3183791Z 作者:微软公司 2018-10-21T23:27:36.3183871Z 帮助:More Information 2018-10-21T23:27:36.3183936Z ======================================= ======================================= 2018-10-21T23:27:37.1663123Z [命令]C:\Windows\system32\chcp.com 65001 2018-10-21T23:27:37.1762529Z 活动代码页:65001 2018-10-21T23:27:37.1808736Z SYSTEMVSSCONNECTION 存在 true 2018-10-21T23:27:37.3473599Z SYSTEMVSSCONNECTION 存在 true 2018-10-21T23:27:37.4707171Z SYSTEMVSSCONNECTION 存在 true 2018-10-21T23:27:37.4739974Z e3e8a3af-5c6c-44e9-820c-c62af0972256 存在真实 2018-10-21T23:27:37.4807474Z 将 NuGet.config 保存到临时配置文件。 2018-10-21T23:27:37.4833034Z 将 NuGet.config 保存到临时配置文件。 2018-10-21T23:27:37.4919745Z 使用以下 URI 的身份验证信息:https://www.nuget.org/api/v2/package 2018-10-21T23:27:37.4988034Z [命令]C:\hostedtoolcache\windows\dncs\2.1.105\x64\dotnet.exe nuget push "{package}" --source https://www.nuget.org/api/v2/package --api-key RequiredApiKey 2018-10-21T23:27:38.3984300Z 信息:将 TranslatorConsole.1.0.0.6.nupkg 推送到“https://www.nuget.org/api/v2/package”... 2018-10-21T23:27:38.4171650Z 信息:PUT https://www.nuget.org/api/v2/package/ 2018-10-21T23:27:38.8798808Z 信息:禁止https://www.nuget.org/api/v2/package/ 462ms 2018-10-21T23:27:38.9562536Z 错误:响应状态码不表示成功:403(指定的API密钥无效、已过期或无权访问指定包。)。 2018-10-21T23:27:40.2195255Z ##[错误]错误:C:\hostedtoolcache\windows\dncs\2.1.105\x64\dotnet.exe 失败,返回码:1 2018-10-21T23:27:40.2206711Z ##[错误]包发布失败 2018-10-21T23:27:40.2307763Z ##[section]整理:Nuget Push

【问题讨论】:

    标签: nuget azure-devops azure-pipelines-release-pipeline


    【解决方案1】:

    在 Github 中跟踪到一个问题:DotNetCore currently does not support using an encrypted Api Key

    dotnet 目前不支持使用 ApiKey,因为 加密密钥所需的库不可用,抱歉 不便。您应该能够使用服务端点 配置了用户名/密码组合。如果你只能使用 一个 ApiKey,我建议使用 nuget 2.* 任务来推送。

    所以,您可以尝试使用Nuget 2.* 任务来推送包。 (添加任务 --> 包 --> Nuget)

    您也可以尝试通过命令行任务将包推送到 NuGet 服务器,方法是调用dotnet nuget push 命令来处理此问题。参考本帖:error while trying to push nuget package from VSTS

    【讨论】:

    • 我切换到 Nuget 任务并且它工作。知道为什么使用用户名/密码基本身份验证不起作用吗?
    【解决方案2】:

    我正在处理同样的问题 - 从 Azure DevOps 向 NuGet.org 提要发布一个 nuget。尽管这个answer 仍然有效,但有一种简单的方法可以做到这一点,而答案对我没有多大帮助。

    解决方案

    步骤 1

    在 NuGet.org administration 中生成 ApiKey。

    第二步

    将 ApiKey 作为secret variable 添加到您的管道中。

    最终产品应如下所示:

    第三步

    使用 PowerShell 任务更新您的管道 YAML

    - task: PowerShell@2
      inputs:
        targetType: 'inline'
        script: 'nuget push $(Build.ArtifactStagingDirectory)\*.nupkg -ApiKey $(myNuGetApiKey) -Source https://api.nuget.org/v3/index.json'
    

    您无需更改此任务中的任何内容。它适用于 Azure DevOps 提供的任何标准 NuGet 打包方式。

    发布您更新的yaml 管道,一切顺利。

    整个管道

    trigger:
    - master
    
    pool:
      vmImage: 'windows-latest'
    
    steps:
    - task: NuGetToolInstaller@1
      inputs:
        versionSpec: '5.7.0'
        checkLatest: true
    - task: DotNetCoreCLI@2
      inputs:
        command: 'build'
        projects: '**/YourProjectNameOr*ForAll.csproj'
    - task: NuGetCommand@2
      inputs:
        command: pack
        packagesToPack: '**/YourProjectNameOr*ForAll.csproj'
    - task: PowerShell@2
      inputs:
        targetType: 'inline'
        script: 'nuget push $(Build.ArtifactStagingDirectory)\*.nupkg -ApiKey $(myNuGetApiKey) -Source https://api.nuget.org/v3/index.json'
    - task: PowerShell@2
      inputs:
        targetType: 'inline'
        script: 'nuget push $(Build.ArtifactStagingDirectory)\*.snupkg -ApiKey $(myNuGetApiKey) -Source https://api.nuget.org/v3/index.json'
    

    注意:第二个任务是发布符号包。如果您的项目不支持源链接,您可以省略此任务。 NuGet 项目经理 Karam Nandwani 的 This 文章指出,拙劣的软件包 *.nupkg*.snupkg 将由一个 nuget 命令自动发布,但这是真的。至少现在是这样。

    【讨论】:

    • @Sam 谢谢。 :)
    猜你喜欢
    • 1970-01-01
    • 2020-01-30
    • 2021-11-19
    • 1970-01-01
    • 2021-05-06
    • 2021-04-17
    • 2020-03-31
    • 2021-04-23
    • 1970-01-01
    相关资源
    最近更新 更多