用于快速查阅 environment.yaml 语法和行为的参考文档。有关相关概念和指南,请参阅 环境配置。
| 字段 | 类型 | 必填 | 执行阶段 | 说明 |
|---|
initialize | 字符串或列表 | 否 | 仅构建时 | 一次性设置命令。结果会保存到机器镜像中。应具备幂等性。 |
maintenance | 字符串或列表 | 否 | 构建 + 会话开始时 | 重复执行的依赖命令。应保持快速且支持增量执行。 |
knowledge | 对象列表 | 否 | 从不 (仅供参考) | 在会话开始时加载到 Devin 上下文中的信息。 |
| 字段 | 类型 | 必填 | 说明 |
|---|
name | string | 否 | 显示在构建日志中的易读标签,便于更轻松地识别失败。 |
run | string | 否 | 要执行的 Shell 命令。支持多行字符串。未设置 run 的步骤会被跳过。 |
| 字段 | 类型 | 必填 | 说明 |
|---|
name | string | 是 | 标识符 (例如 test、lint、startup、architecture、notes) 。 |
contents | string | 是 | 供参考的内容。不会作为命令执行。 |
- 命令会在启用
set -e 的 bash 中运行——如果任何一行失败,该步骤会立即停止。
- 仓库级命令会从 仓库根目录 (
~/repos/<repo-name>) 运行。Enterprise 和组织级命令会从 主目录 (~) 运行。
- 展开形式中的每个步骤都会在各自独立的 shell 上下文中运行。
最佳实践:
- 对子目录中的命令使用 subshell:
(cd packages/frontend && npm install)。
- 在
maintenance 中优先使用 增量安装 (例如,使用 npm install 而不是 npm ci) 。
- 在
maintenance 中避免使用 构建命令 (npm run build、make) ——它们会在每次会话中运行。
- 添加
-y 标志以避免交互式提示:sudo DEBIAN_FRONTEND=noninteractive apt-get install -y。
- 命令应当 可以安全地重复运行——
maintenance 会在每次会话中运行。
Devin 的基础镜像 (Ubuntu 22.04、x86_64) 已预装以下工具,你无需另行安装。
| Category | 已包含 |
|---|
| Languages | Node.js (通过 nvm) 、Python 3.12 (通过 pyenv,另可用 3.9–3.11) 、Rust (通过 rustup) 、Java (OpenJDK 17) 、Scala、Go |
| Package managers | npm、yarn、pnpm、pip、cargo |
| Version control | git、gh (GitHub CLI) 、git-lfs |
| Containers | Docker (含 Compose 插件——请使用 docker compose,不要使用 docker-compose) |
| Build tools | make、build-essential (gcc、g++) |
| Utilities | curl、wget、jq、ripgrep、direnv、awscli、ffmpeg、Homebrew、OpenVPN |
| Browsers | Chrome (用于浏览器测试) |
此列表可能不完全。你可以在 Devin 会话中运行 which <tool> 或 <tool> --version 进行检查。如果缺少某个工具,请在你的 initialize 部分中安装。
| 术语 | 定义 |
|---|
| 配置 | 已保存的环境配置 (即 YAML 内容) 。每个 代码仓库/org/enterprise 都有各自的配置。 |
| 配置版本 | 配置的某个特定修订版本。每次保存都会创建一个新版本。 |
| 构建 | 执行你的配置以创建机器镜像的过程。 |
| 机器镜像 | 成功构建后生成的已保存环境。会话会从最新的成功镜像启动。 |
| 已配置 | 具有显式 YAML 配置 (initialize/maintenance/knowledge) 的代码仓库。 |
| 已包含 | 已克隆到机器镜像中、但没有自定义配置的代码仓库。 |
| 可用 | org 可访问但未添加到环境中的代码仓库。 |
| $ENVRC | 用于设置环境变量的特殊文件,类似于 GitHub Actions 的 $GITHUB_ENV。 |
| 部分成功 | 指核心部分成功,但某些代码仓库级设置失败的构建。 |