排查构建失败问题
步骤 1:检查构建状态
| 状态 | 含义 | 你需要做什么 |
|---|---|---|
| Success | 一切正常 | 无需操作——你的机器镜像已准备就绪 |
| Partial | 核心构建已成功,但部分仓库失败 | 检查哪些仓库失败了;对应的会话可能会有问题 |
| Failed | 构建本身失败 | 查看失败步骤的日志 |
| Cancelled | 此构建已被较新的构建取代 | 这是正常情况——如有需要,请启动更新的构建 |
| Skipped | 未检测到配置更改 | 无需操作——此次无需构建 |
步骤 2:查看构建日志
- Shared setup — 企业级 + 组织级命令
- Clone — 克隆代码仓库
- Repo setup — 针对各代码仓库的命令
- Finalize — 健康检查和镜像创建
name 字段的展开形式,日志会准确显示失败的是哪个步骤。这也是为步骤命名的最大优势之一:
步骤 3:识别失败特征
克隆失败
- 未配置代码仓库访问权限 — 请检查 Enterprise 设置 > 集成
- 私有 代码仓库 需要身份验证令牌
- 代码仓库已重命名或删除
- 网络连接有问题 (需要 VPN 或代理)
依赖安装失败
npm install、pip install 或类似步骤。
常见原因:
修复方法: 在你的 maintenance 部分中添加 registry 身份验证配置。有关私有 registry 的配置模式,请参阅 配置示例。
超时失败
- 交互式提示在等待输入——添加
-y参数,使用DEBIAN_FRONTEND=noninteractive - 依赖项安装量过大,耗时太久
- 命令运行超过 1 小时的超时时限
initialize,这样它们只会在构建时运行 (而不是在每次会话中都运行) 。
权限错误
- 安装系统软件包时缺少
sudo - 尝试写入受保护的目录
- 文件归属于上一次构建中的其他用户
apt-get、写入 /etc/ 等) 使用 sudo。对于用户级软件包管理器 (npm、pip、cargo) ,通常不需要 sudo。
“找不到命令” 错误
initialize 中安装的工具,在 maintenance 或后续步骤中无法使用。
常见原因:
- 工具被安装到不在
PATH中的目录 - 后续步骤没有加载 Shell 配置文件 (
.bashrc) 中的更改
$ENVRC 将该工具所在目录添加到 PATH:
步骤 4:迭代
- 修复你的 YAML 配置
- 保存——系统会自动启动新的构建
- 查看新构建的日志
常见错误速查
| 错误 | 可能原因 | 修复 |
|---|---|---|
command not found | 工具未安装或未加入 PATH | 添加到 initialize,或通过 $ENVRC 加入 PATH |
Permission denied | 缺少 sudo | 安装系统软件包时使用 sudo apt-get install |
npm ERR! 404 | 私有软件包,缺少身份验证 | 在 maintenance 中添加 registry 身份验证令牌 (示例) |
E: Unable to locate package | 未先运行 apt-get update | 在 apt-get install 前添加 sudo apt-get update -qq |
| 超时 | 安装过慢或出现交互式提示 | 移到 initialize;添加 -y 和 DEBIAN_FRONTEND=noninteractive |
| 会话开始后配置文件为空 | 在 initialize 中写入了凭据 | 将凭据相关步骤移到 maintenance |
| 构建成功但会话异常 | maintenance 命令在会话开始时执行失败 | 在会话中手动测试你的 maintenance 命令 |
从交互式设置迁移
迁移如何进行
- 开关开启 (默认) ——所有会话都使用旧版快照。不会造成中断。
- 开关关闭 ——所有会话都使用声明式快照。
迁移步骤
准备配置
记下你当前交互式设置中的命令——你需要将它们映射到 YAML 的各个部分:
| 旧版向导步骤 | 声明式对应项 |
|---|---|
| Git pull | 自动 (内置) |
| 配置 secrets | Secrets (不变) |
| 安装依赖 | initialize 部分 |
| 维护依赖 | maintenance 部分 |
| 设置 lint | 名为 lint 的 knowledge 条目 |
| 设置测试 | 名为 test 的 knowledge 条目 |
| 运行本地 app | 名为 startup 的 knowledge 条目 |
| 其他说明 | 名为 notes 的 knowledge 条目 |
编写 YAML
前往 Settings > Devin’s Environment 并选择你的代码仓库。将旧版命令映射如下:或者,你也可以直接启动一个 Devin 会话,让它为代码仓库完成设置——Devin 可以自动为你生成配置。
切换前先测试
在为所有人迁移之前,先使用 manual override 在单个会话上测试声明式设置。这样,你 (或负责迭代配置的人) 可以使用声明式快照,而其他人仍继续使用旧版快照。持续迭代配置,直到声明式设置与你的旧版环境完全一致。
Enterprise 迁移
- 先配置企业级 YAML —— 包括 VPN、证书和代理设置等共享基础架构。
- 每次迁移一个组织。 每个组织都有各自的旧版切换开关,因此你可以逐步迁移,而不影响其他团队。
- 考虑设立测试组织。 对于大型企业,建议创建一个专用的测试组织,先验证声明式配置,再推广到生产组织。
- 利用 Devin 实现规模化配置。 Devin 可以通过并行会话配置代码仓库 —— 为每个代码仓库启动一个会话,Devin 会自动生成配置建议。这种方式非常适合为 10–100+ 个代码仓库完成接入。
旧快照会怎样?
关键差异
| Feature | 旧版 (交互式) | 声明式 (YAML) |
|---|---|---|
| 可复现性 | 有状态——快照中的更改会随时间不断累积 | 可完全通过 YAML 复现 |
| 多仓库 | 一次只能处理一个仓库 | 一次构建中可包含多个仓库,并支持并行克隆 |
| 维护 | 手动执行“维护依赖”步骤 | 自动——maintenance 会在会话开始时运行 |
| Enterprise/组织 层级 | 不支持 | 三级层级 (Enterprise → Org → 代码仓库) |
| Devin 建议 | 仅在向导中提供 | 在会话中提供——Devin 可建议更新配置 |
| 成本 | 向导会话会消耗 ACU | 设置会话约消耗 1–3 ACU;构建免费 |
常见问题
常见问题
initialize,什么时候使用 maintenance?
initialize 用于一次性的工具安装 (apt-get install、语言运行时设置、全局 CLI 工具) 。maintenance 用于需要持续保持最新的依赖安装 (npm install、pip install、uv sync) 。
如何添加环境变量?
将它们写入 $ENVRC:
initialize 部分中使用 sudo apt-get install。务必使用 DEBIAN_FRONTEND=noninteractive 和 -y 标志,以避免出现交互式提示。
如果我需要为不同的 代码仓库 使用不同的 Node 版本,该怎么办?
在 代码仓库 级配置中使用 nvm:
构建相关
Enterprise 特有
已知限制
- 无构建预览/沙箱 —— 每次配置更改都会触发一次完整构建。请先在会话中测试命令。
- 串行代码仓库设置 —— 代码仓库级别的设置一次只能运行一个 代码仓库 (按字母顺序) 。代码仓库数量越多,构建耗时越长。
- YAML 不支持条件逻辑 —— 该格式不支持 if/else。如有需要,请在命令中使用 shell 条件判断 (例如:
[ -f package.json ] && npm install) 。 - 不支持搜索构建日志 —— 构建日志必须手动滚动查看。请使用具名步骤,以便更容易定位失败位置。
