Azure Pipelines发布任务无法创建目录、路径权限被拒绝问题求助
问题根因
错误 MSB3191: 无法创建目录 "/home/iradmin/aaaa/my-proj/WebUI/"。路径 '/home/iradmin/aaaa/my-proj/WebUI/' 访问被拒绝。
以上错误已经明确指出问题本质,和日志中附带的.NET 5兼容性警告无关,不需要将排查方向放在SDK版本或Nuget配置上:
- 你使用的是Azure DevOps托管的Ubuntu代理,代理默认运行身份为
vsts用户,仅对代理工作目录(/home/vsts/work/路径下)有读写权限 - 你配置的
PublishPath为/home/iradmin/aaaa/my-proj,该路径不属于vsts用户的可写范围,也不会默认存在于托管代理的系统中,dotnet publish命令无权限创建目录和写入文件,因此抛出报错。
解决方案
根据你的实际发布需求选择对应方案即可:
场景1:仅需在代理上生成发布产物,后续再部署到目标服务器
修改PublishPath为Azure Pipeline预置的可写目录路径即可,推荐直接使用内置的环境变量避免权限问题:
variables: buildConfiguration: 'Release' # Build.ArtifactStagingDirectory是代理默认的产物暂存目录,权限配置正常 PublishPath: '$(Build.ArtifactStagingDirectory)/my-proj'
发布完成后如果需要留存产物,可添加PublishBuildArtifacts@1任务将产物上传到Azure DevOps,后续部署阶段直接取用即可。
场景2:预期直接将代码发布到/home/iradmin/aaaa/my-proj所在的私有服务器
托管代理无法直接写入你私有服务器的目录,需要调整发布流程:
- 先按场景1的配置把产物发布到代理的临时可写目录
- 新增SSH部署或FTP部署任务,将代理上的发布产物上传到目标服务器对应目录,部署时配置目标服务器的登录凭证,确保所用账号有
/home/iradmin/aaaa/my-proj的写入权限。
内容的提问来源于stack exchange,提问作者Ahmed Badawi
相关产品推荐
相关产品推荐

