无法将NuGet包发布到Azure DevOps同组织内的Artifact源
问题分析
从报错信息/opt/hostedtoolcache/NuGet/6.12.2/x64/nuget.exe: Permission denied和执行环境/usr/bin/bash可以确定:你的流水线使用的是Linux代理机器,但脚本中调用的nuget.exe是Windows平台专属的可执行文件,Linux系统无法直接运行该文件,导致执行失败。
解决方案
推荐以下两种适配Linux代理的解决方式:
方案1:使用官方NuGet推送任务(最优选择)
替换手动脚本为Azure DevOps官方的NuGetCommand@2任务,该任务会自动适配代理操作系统,无需手动处理NuGet执行文件的兼容性问题,同时自动复用之前的认证信息:
steps: - task: NuGetToolInstaller@1 displayName: 'NuGet Tool Installer' - task: NuGetAuthenticate@1 displayName: 'NuGet Authenticate' - task: NuGetCommand@2 displayName: 'NuGet Push to Feed' inputs: command: 'push' packagesToPush: '$(Build.ArtifactStagingDirectory)/**/*.nupkg' nuGetFeedType: 'internal' publishVstsFeed: '<ORGANIZATION_NAME>/<PROJECT_NAME>/<FEED_NAME>'
方案2:改用DotNet CLI推送命令
如果坚持使用脚本任务,在Linux环境下需要使用dotnet nuget push命令(而非nuget.exe),同时修正路径分隔符(Linux使用/而非Windows的\):
steps: - task: NuGetToolInstaller@1 displayName: 'NuGet Tool Installer' - task: NuGetAuthenticate@1 displayName: 'NuGet Authenticate' - script: | dotnet nuget push $(Build.ArtifactStagingDirectory)/*.nupkg --source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v3/index.json" --api-key az displayName: 'DotNet NuGet Push'
额外注意点
- 确认流水线代理池的操作系统类型:如果后续切换为Windows代理,可重新使用
nuget.exe命令,但推荐始终使用官方任务以保证跨平台兼容性。 - 路径匹配:Linux环境下避免使用Windows风格的
\转义符,否则会导致无法匹配到.nupkg文件。
内容的提问来源于stack exchange,提问作者Imran Sh
相关产品推荐
相关产品推荐

