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

自建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的常见原因

  1. 缺失代码拉取步骤
    Azure DevOps流水线默认会自动添加checkout任务拉取代码,但如果你的流水线YAML手动移除了该步骤,或通过UI设置跳过了代码拉取,代理机器上就不会有项目源码,自然找不到package.json。
    检查你的流水线YAML,确认包含默认拉取配置:
steps:
- checkout: self
  fetchDepth: 1
  1. 工作目录配置错误
    如果npm install任务指定了错误的workingDirectory(比如设为/home/username/myagent/_work而非源码所在的s子目录),执行命令时就会在错误路径下寻找文件。
    确保npm install的工作目录指向源码根目录,比如:
- script: npm install
  workingDirectory: $(System.DefaultWorkingDirectory)

其中$(System.DefaultWorkingDirectory)是DevOps内置变量,默认指向源码目录_work/<流水线ID>/s。

  1. 代码拉取路径被自定义修改
    如果checkout任务通过path参数指定了非默认拉取路径,后续任务未同步调整工作目录也会导致文件找不到。比如:
- checkout: self
  path: 'my-custom-path'

此时源码会被拉到/home/username/myagent/_work/<流水线ID>/my-custom-path,需将npm install的工作目录改为该路径。

  1. 权限或拉取中断问题
    极少数情况下,代理运行用户对_work目录无读写权限,或代码拉取过程中断,导致package.json未完整拉取。可手动检查源码目录下是否存在该文件,同时确认username用户对_work目录拥有完整权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:12:27