首页 > 解决方案 > 将 nuget 包从 Visual Studio 推送到 devops 工件

问题描述

在构建解决方案时,我正在尝试自动将 nuget 包从 Visual Studio 推送到 Azure Devops Artifact。我可以在我的本地 nuget 存储库上自动执行此操作,但我无法在我的 Azure 存储库中执行此操作。它因 401(未经授权)而失败,因为我无法在命令上放置凭据并且未使用 VS 凭据。为了自动化发布,我在项目文件上设置了这个命令:

  <Target Name="NugetAdd" AfterTargets="Pack">
    <exec command="nuget add $(OutputPath)$(PackageId).$(PackageVersion).nupkg -source d:\NuGetLocal" />    
    <exec command="nuget push -source MyAzureRepo -ApiKey VSTS $(OutputPath)$(PackageId).$(PackageVersion).nupkg" />    
  </Target>

第一个命令执行成功,第二个命令失败,因为请求凭据。如果我在 powershell 中运行命令,它会毫无问题地运行,要求提供凭据。有办法让它工作吗?

标签: visual-studioazure-devopsnugetnuget-packageazure-artifacts

解决方案


您可以尝试将您的天蓝色工件提要的凭据放在您的 nuget.config 文件中。

首先,您需要使用Read&Write Packaging范围从 Azure devops生成个人访问令牌。

然后,您可以为您的 nuget 源提供 Azure 提要的凭据。请参见下面的示例:

<configuration>
  <packageSources>
    <add key="AzureArtifactFeedName" value="https://pkgs.dev.azure.com/org/_packaging/AzureArtifactFeedName/nuget/v3/index.json" />
  </packageSources>
  <packageSourceCredentials>
    <AzureArtifactFeedName>
        <add key="Username" value="any" />
        <add key="ClearTextPassword" value="{Personal Access Token}" />
      </AzureArtifactFeedName>
  </packageSourceCredentials>
</configuration>

您还可以运行以下命令来添加提要凭据:

sources Add -Name "AzureArtifactFeedName" -Source "https://my.pkgs.visualstudio.com/_packaging/AzureArtifactFeedName/nuget/v3/index.json" -username any -password PersonalAccessToken -ConfigFile path/to/Nuget.config -StorePasswordInClearText

然后可以自动推送包。

上述解决方案可能会引起安全问题,因为它在 nuget.config 文件中显式写入 PAT。

使用 Azure 管道自动打包和推送包(使用NuGet 任务运行packpush命令)可能是更好的解决方法。

有关更多信息,请参阅此处的文档。


推荐阅读