You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSTS构建代理拉取源代码失败:Permission denied问题求助

解决Azure Linux代理池二次构建拉取源码Permission Denied问题

我帮你拆解下这个问题——你遇到的情况是首次构建正常,二次构建就卡在拉源码阶段报权限拒绝,结合你设置的clean: true和clean options: sources,核心问题应该是清理操作打乱了源码目录的权限配置。

问题根源分析

  • 首次构建时,代理服务的运行账号(通常是vstsagent或你自定义的账号)创建了源码目录,并且拥有完整的读写权限;
  • 当开启sources级别的清理时,构建会强制清空源码目录的所有内容,甚至会重置目录的所有者和权限;
  • 二次构建拉取源码时,代理账号已经没有足够权限去创建或写入新的源码文件,直接触发Permission denied报错。

具体解决方案

这里给你几个可行的解决步骤,按优先级尝试:

  1. 检查代理运行账号的目录权限

    • 登录到出问题的Linux虚拟机,执行ps aux | grep agent找到代理进程的运行用户;
    • 然后检查代理工作目录(默认是/home/<代理账号>/agent/_work)的权限,确保该用户拥有rwx权限:
      ls -ld /home/<代理账号>/agent/_work
      
    • 如果权限不对,手动修复:
      chown -R <代理账号>:<代理账号> /home/<代理账号>/agent/_work
      chmod -R 755 /home/<代理账号>/agent/_work
      
  2. 调整清理策略避免权限重置

    • 如果业务上必须保留清理操作,建议把clean options从sources改成outputDirectory,这样只会清理构建输出目录,不会改动源码目录的权限;
    • 要是必须清理源码目录,可以在构建的第一步添加一个Shell脚本任务,提前修复权限:
      # 确保代理账号拥有源码目录的权限
      chown -R $(Agent.UserName):$(Agent.UserName) $(Build.SourcesDirectory)
      chmod -R 755 $(Build.SourcesDirectory)
      
  3. 验证Git拉取的凭据有效性

    • 如果是SSH方式拉取源码,检查虚拟机上代理账号的.ssh目录下的密钥是否有权限访问代码仓库,确保密钥没有过期或权限设置错误(密钥文件权限必须是600);
    • 如果是HTTPS方式,确认使用的PAT(个人访问令牌)没有过期,且拥有代码仓库的读取权限。
  4. 重置代理工作目录

    • 停止代理服务:sudo systemctl stop vstsagent.service(如果是systemd管理的话);
    • 删除代理的_work目录:rm -rf /home/<代理账号>/agent/_work;
    • 重新启动代理服务,让它重新初始化工作目录,这样目录权限会被自动设置正确。

内容的提问来源于stack exchange,提问作者Bobby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:05:47