使用Azure Devops发布Nuget程序包

时间:2018-10-21 23:31:40

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

我正在尝试在Azure DevOps中创建一个发布管道,该发布管道会将程序包发布到Nuget.org。构建管道可以正常工作,并将包创建为构建工件。我可以发布到Azure Artifacts中托管的供稿,而我不能发布到Nuget.org。我相信问题出在服务连接上。 Service Connection

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

  

DotNet Core不支持加密的API密钥'错误

这是试图推出包装的释放步骤。 enter image description here

我还尝试了https://api.nuget.org/v3/index.json作为Feed URL,但这似乎没有什么作用。

日志输出。

  

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作者:Microsoft Corporation   2018-10-21T23:27:36.3183871Z帮助:More Information   2018-10-21T23:27:36.3183936Z ========================================= =====================================   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-密钥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

2 个答案:

答案 0 :(得分:2)

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

  

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

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

或者,您可以尝试通过调用dotnet nuget push命令来通过命令行任务将软件包推送到NuGet服务器。引用此线程:error while trying to push nuget package from VSTS

答案 1 :(得分:0)

我遇到了同样的问题-从Azure DevOps向NuGet.org feed中发布一个nuget 。尽管这个answer仍然有效,但是有一种简单的方法可以做到这一点,答案并没有太大帮助。

解决方案

步骤1

在NuGet.org administration中生成ApiKey。

enter image description here

步骤2

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

Setup of secrets

最终产品应如下所示:

Final Secret ApiKey

步骤3

使用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 botch软件包将通过一个nuget命令自动发布,但这是事实。至少现在。