将 nuget 包从 visual studio 推送到 devops 工件
Push nuget package from visual studio to devops artifact
我正在尝试在构建解决方案时自动将 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 中的命令它 运行 没有问题,要求提供凭据。
有办法让它工作吗?
您可以尝试将 azure artifacts feed 的凭据放入 nuget.config 文件中。
首先,您需要使用 Read&Write Packaging 范围从 Azure devops 生成一个 Personal access token。
然后您可以为您的 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>
您还可以运行下面的命令来添加 feed 凭据:
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
然后就可以自动推送包了
以上解决方案可能会引起安全问题,因为它明确地将 PAT 写入 nuget.config 文件。
使用 Azure 管道自动打包和推送您的包(使用 NuGet task 到 运行 pack
和 push
命令)可能是更好的解决方法。
有关详细信息,请参阅 document here。
我已经通过命令解决了
nuget sources update -Name MyAzureRepo -Source https://my.pkgs.visualstudio.com/_packaging/MyAzureRepo/nuget/v3/index.json -用户名 user@user.com -密码 PAT
在那之后,每次我构建解决方案时,命令都会起作用。
Levi Lu-MSFT 的解决方案不符合我的需求,因为我只想在决定增加版本时更新 nuget 存储库。
我正在尝试在构建解决方案时自动将 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 中的命令它 运行 没有问题,要求提供凭据。 有办法让它工作吗?
您可以尝试将 azure artifacts feed 的凭据放入 nuget.config 文件中。
首先,您需要使用 Read&Write Packaging 范围从 Azure devops 生成一个 Personal access token。
然后您可以为您的 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>
您还可以运行下面的命令来添加 feed 凭据:
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
然后就可以自动推送包了
以上解决方案可能会引起安全问题,因为它明确地将 PAT 写入 nuget.config 文件。
使用 Azure 管道自动打包和推送您的包(使用 NuGet task 到 运行 pack
和 push
命令)可能是更好的解决方法。
有关详细信息,请参阅 document here。
我已经通过命令解决了
nuget sources update -Name MyAzureRepo -Source https://my.pkgs.visualstudio.com/_packaging/MyAzureRepo/nuget/v3/index.json -用户名 user@user.com -密码 PAT
在那之后,每次我构建解决方案时,命令都会起作用。
Levi Lu-MSFT 的解决方案不符合我的需求,因为我只想在决定增加版本时更新 nuget 存储库。