【问题标题】:Push Nuget Package to Azure DevOps将 Nuget 包推送到 Azure DevOps
【发布时间】:2019-07-04 10:27:42
【问题描述】:

我正在尝试将 Nuget 包从 MAC 推送到 Azure DevOps。

我创建了一个 Azure DevOps artefacts feed 并尝试使用以下方式推送一个包:

dotnet nuget push 
  --source "https://pkgs.dev.azure.com/MyProject/_packaging/MyFeed/nuget/v2" 
  --api-key "MyToken" 
  "MyPackage.nupkg"

我按照以下说明生成了令牌:https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops,授予完全访问权限。

我一直有错误:

错误:无法加载源 https://pkgs.dev.azure.com/mdmoura/_packaging/Moleky/nuget/v3/index.json 的服务索引。
错误:响应状态码不表示成功:401(未授权)。

我尝试了不同的选项,但总是收到此错误...

我可能会错过什么?

【问题讨论】:

  • 为什么不用内置任务?
  • 您是否尝试过从 Azure Devops 门户获取 PAT token
  • 您的计算机上有代理吗?如果是,请尝试将其删除并再次测试。并且可以直接在浏览器中打开源码路径吗?
  • @TomSun 是的,这就是我获得令牌的方式......
  • @4c74356b41 你什么意思?你能解释一下吗?

标签: azure-devops nuget dotnet-cli


【解决方案1】:

管道未在 Feed 中进行身份验证。在尝试推送 nuget 包之前,您需要添加身份验证任务。 试试下面的

- task: NuGetAuthenticate@0
  displayName: 'Authenticate in NuGet feed'
- script: dotnet nuget push $(PATH_PIPELINE_ARTIFACT_NAME)/**/*.nupkg --source MyProject --api-key MyToken
  displayName: 'Uploads nuGet packages'

注意NuGetAuthenticate@0 任务预先进行身份验证。无需进行任何其他身份验证,因为您似乎正在使用 Azure DevOps 工件。否则你将不得不创建一个连接(更多信息https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/package/nuget-authenticate?view=azure-devops

根据命令dotnet nuget push 注意我用正则表达式**/*.nupkg 编写了一个完整路径。使用或替换此 PATH_PIPELINE_ARTIFACT_NAME 变量为要上传的 nuGet 包当前所在的路径。正则表达式将允许您发布该文件夹中的所有 nuGet 包。

【讨论】:

    【解决方案2】:

    编辑:如 cmets 所述,以下逗号需要 .NET Core 3.1

    你能试试这个吗:

    dotnet nuget add source "https://pkgs.dev.azure.com/MyProject/_packaging/MyFeed/nuget/v2" --name MyFeed --username "YourUserName" --password "YourPatToken"
    

    然后

    dotnet nuget push "MyPackage.nupkg" --source MyFeed --api-key az
    

    这就是这里描述的 nuget 方式的等价物:https://docs.microsoft.com/en-us/azure/devops/artifacts/nuget/publish?view=azure-devops#create-and-publish-your-own-nuget-package

    【讨论】:

    • 错误:无法识别的命令或参数“添加”。此命令需要 .net Core 3.1.200
    【解决方案3】:

    为什么你运行dotnet nuget push 而不是nuget push

    请注意:这里的 API_KEY 可以是任何非空值,根据文档:https://docs.microsoft.com/en-us/azure/devops/artifacts/get-started-nuget?view=azure-devops&tabs=new-nav

    【讨论】:

    • 我正在使用 dotnet push,因为我在 MAC 上运行,而 nuget 仅适用于 Windows。 dotnet nuget 不就是 nuget 吗?
    • Rob 想说的是,当您使用 nuget 命令行 (docs.microsoft.com/en-us/azure/devops/artifacts/nuget/…) 时,令牌会被忽略。我知道这是真的,并且使用虚拟 api 密钥的推送适用于 nuget。虽然没有尝试过dotnet。无论如何,这里您的问题与 PAT 有关,而不是 API 密钥 ^^
    • 通过比较这两种方法,您应该首先执行 nuget add source (docs.microsoft.com/en-us/dotnet/core/tools/…) 并使用您的令牌 (PAT) 作为密码。只有这样,您才能使用虚拟 api 密钥推送包
    猜你喜欢
    • 2020-06-27
    • 2020-04-12
    • 2021-03-08
    • 2021-07-10
    • 1970-01-01
    • 2019-03-14
    • 2021-07-14
    • 2015-09-13
    • 2020-01-30
    相关资源
    最近更新 更多