自建Linux Azure DevOps Agent执行npm i时找不到package.json的问题
代码存储路径及问题排查
代理机器上的代码存储路径
Azure DevOps自建代理的工作目录默认是/home/username/myagent/_work,流水线代码会按以下结构存储:
- 每个流水线对应一个以流水线ID命名的子目录,比如
/home/username/myagent/_work/123 - 项目源码默认存放在该流水线目录下的
s(source)文件夹中,完整路径类似/home/username/myagent/_work/123/s - 此外还有
a(存放构建产物)、b(临时构建目录)等子目录,核心源码都集中在s目录内
你可以在代理机器上执行以下命令验证源码路径:
ls -l /home/username/myagent/_work/<你的流水线ID>/s
若不清楚流水线ID,可通过遍历_work下的目录,查看最近修改的文件夹(通常就是当前运行流水线的目录)。
找不到package.json的常见原因
- 缺失代码拉取步骤
Azure DevOps流水线默认会自动添加checkout任务拉取代码,但如果你的流水线YAML手动移除了该步骤,或通过UI设置跳过了代码拉取,代理机器上就不会有项目源码,自然找不到package.json。
检查你的流水线YAML,确认包含默认拉取配置:
steps: - checkout: self fetchDepth: 1
- 工作目录配置错误
如果npm install任务指定了错误的workingDirectory(比如设为/home/username/myagent/_work而非源码所在的s子目录),执行命令时就会在错误路径下寻找文件。
确保npm install的工作目录指向源码根目录,比如:
- script: npm install workingDirectory: $(System.DefaultWorkingDirectory)
其中$(System.DefaultWorkingDirectory)是DevOps内置变量,默认指向源码目录_work/<流水线ID>/s。
- 代码拉取路径被自定义修改
如果checkout任务通过path参数指定了非默认拉取路径,后续任务未同步调整工作目录也会导致文件找不到。比如:
- checkout: self path: 'my-custom-path'
此时源码会被拉到/home/username/myagent/_work/<流水线ID>/my-custom-path,需将npm install的工作目录改为该路径。
- 权限或拉取中断问题
极少数情况下,代理运行用户对_work目录无读写权限,或代码拉取过程中断,导致package.json未完整拉取。可手动检查源码目录下是否存在该文件,同时确认username用户对_work目录拥有完整权限。
内容的提问来源于stack exchange,提问作者Remi
相关产品推荐
相关产品推荐

