使用Azure DevOps发布Nuget包

6
我正在尝试创建一个发布管道,将一个软件包发布到Nuget.org中。生成管道正常工作,并创建了构建工件包。我可以发布到Azure Artifacts托管的feed上,但无法发布到Nuget.org上。我相信问题出在服务连接上。Service Connection
我已经尝试使用ApiKey,但是会引发错误:

DotNet Core不支持加密API Key

这是尝试推送软件包的发布步骤。 enter image description here 我还尝试过使用Feed URL https://api.nuget.org/v3/index.json,但似乎没有什么区别。
日志输出:
2018-10-21T23:27:36.3177322Z ##[section]开始:Nuget 推送 2018-10-21T23:27:36.3183449Z ============================================================================== 2018-10-21T23:27:36.3183547Z 任务:.NET Core 2018-10-21T23:27:36.3183635Z 描述:构建、测试、打包或发布 dotnet 应用程序,或运行自定义的 dotnet 命令。对于包命令,支持 NuGet.org 和验证的 feed,如 Package Management 和 MyGet。 2018-10-21T23:27:36.3183729Z 版本:2.141.0 2018-10-21T23:27:36.3183791Z 作者:Microsoft Corporation 2018-10-21T23:27:36.3183871Z 帮助:更多信息 2018-10-21T23:27:37.1663123Z [command]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 存在 true 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 [command]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 信息:Forbidden https://www.nuget.org/api/v2/package/ 462ms 2018-10-21T23:27:38.9562536Z 错误:响应状态代码未指示成功:403 (指定的 API 密钥无效、已过期或没有权限访问指定的包)。 2018-10-21T23:27:40.2195255Z ##[error]错误:C:\hostedtoolcache\windows\dncs\2.1.105\x64\dotnet.exe 失败,返回代码为:1 2018-10-21T23:27:40.2206711Z ##[error]未能发布包 2018-10-21T23:27:40.230
2个回答

5

在Github上有一个问题被跟踪:DotNetCore目前不支持使用加密的ApiKey

由于没有可用的库来加密密钥,因此当前不支持在dotnet中使用ApiKey,对此造成的不便我们深感抱歉。您应该能够使用配置了用户名/密码组合的服务端点。如果您只能使用ApiKey,我建议使用nuget 2.*任务进行推送。

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

或者您可以通过调用dotnet nuget push命令通过命令行任务将软件包推送到NuGet服务器以解决此问题。参考此线程:error while trying to push nuget package from VSTS


我切换到了Nuget任务,它起作用了。你有什么想法为什么使用用户名/密码基本认证不起作用? - Sean

3
我正在处理同样的问题 - 从Azure DevOps发布Nuget到NuGet.org feed。尽管答案仍然有效,但有一种简单的方法可以做到这一点,而且这个答案对我帮助不大。
解决方案
第一步
在NuGet.org 管理中生成ApiKey。

enter image description here

步骤2:
将ApiKey作为秘密变量添加到您的流水线中。

Setup of secrets

最终产品应该长成这个样子:

Final Secret ApiKey

步骤三:

使用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在这篇文章中指出,混淆的包,即*.nupkg*.snupkg将由一个nuget命令自动发布,但目前至少是这样的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接