$SECRET_NAME 引用 secrets。使用模板前,请先在每个蓝图编辑器的 Secrets 选项卡中配置好这些 secrets。切勿在蓝图中硬编码凭据。快速开始
Node.js 项目
Node.js 项目
Python 项目
Python 项目
全栈(Node + Python)
全栈(Node + Python)
仓库蓝图
Python
- uv(推荐)
- pip + venv
Node.js
- npm
- pnpm
maintenance 中使用 npm install (不要用 npm ci) 。前者会执行增量更新,而 npm ci 会在每个会话中删除 node_modules,并从头重新安装。Go
Java
- Gradle
- Maven
Ruby on Rails
Rust
Monorepo
- 多语言
- 多个 JDK 版本
私有包注册表
Node.js 注册表
- npm(作用域)
- npm(完整镜像)
- pnpm
- Yarn
@myorg/*) ,同时公开软件包仍从默认的 npm registry 获取。必需的 secrets
必需的 secrets
GITHUB_PACKAGES_TOKEN — 具有 read:packages 作用域的 Personal access token 或 GitHub App 令牌Python 软件包注册表
- pip / uv
- Poetry
必需的 secrets
必需的 secrets
PYPI_REGISTRY_URL— 你的 PyPI 索引完整 URL,如有需要请包含凭据 (例如https://user:token@nexus.example.com/repository/pypi-proxy/simple)
JVM 软件包注册表
- Maven
- Gradle
必需的 secrets
必需的 secrets
MAVEN_REGISTRY_URL— 你的 Maven registry URL (例如https://artifactory.example.com/artifactory/maven-virtual) -REGISTRY_USER— registry 用户名 -REGISTRY_PASS— registry 密码或 API 令牌
其他软件包注册表
Go 模块代理
Go 模块代理
必需的 secrets
必需的 secrets
GO_PROXY_URL— 你的 Go 模块代理 URL (例如https://athens.corp.internal)GIT_TOKEN— 用于托管 Go 模块的私有 Git repo 的 Personal Access Token
.NET / NuGet
.NET / NuGet
必需的 secrets
必需的 secrets
NUGET_SOURCE_URL— 你的 NuGet 源 URLNUGET_API_KEY— 该源的 API key 或 PAT
Docker
Docker
必需的 secrets
必需的 secrets
DOCKER_MIRROR_URL(可选) — 你的 Docker Hub 镜像源 URL (例如https://mirror.corp.internal)DOCKER_REGISTRY_URL— 你的私有容器注册表 URL (例如registry.corp.internal:5000)DOCKER_REGISTRY_USER— 注册表用户名DOCKER_REGISTRY_PASS— 注册表密码或 API 令牌
Rust / Cargo
Rust / Cargo
必需的 secrets
必需的 secrets
CARGO_REGISTRY_INDEX— 私有 registry index 的 URL (e.g.,sparse+https://cargo.corp.internal/api/v1/crates/)CARGO_REGISTRY_TOKEN— 私有 registry 的身份验证令牌
Ruby / Bundler
Ruby / Bundler
必需的 secrets
必需的 secrets
GEM_SERVER_URL— 你的私有 gem 服务器的 URL (例如:https://artifactory.example.com/artifactory/api/gems/gems-virtual)REGISTRY_USER— Registry 用户名REGISTRY_PASS— Registry 密码或 API 令牌
PHP / Composer
PHP / Composer
必需的 secrets
必需的 secrets
COMPOSER_REGISTRY_URL— 你的私有 Composer 注册表的 URL (例如:https://repo.packagist.com/<org>)REGISTRY_USER— 注册表用户名REGISTRY_PASS— 注册表密码或 API 令牌
AWS CodeArtifact 令牌更新
AWS CodeArtifact 令牌更新
maintenance 设置令牌刷新命令,以便 Agent 在需要时可重新运行该命令。此示例会将 npm、pip 和 Maven 配置为使用 CodeArtifact。awscli 已预装在 Devin 的基础镜像中。你只需要刷新令牌并配置 registry。必需的 secrets
必需的 secrets
AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY— 具有codeartifact:GetAuthorizationToken和sts:GetServiceBearerToken权限的 IAM 凭据CA_DOMAIN— 你的 CodeArtifact 域名CA_DOMAIN_OWNER— 拥有该域的 AWS 账户 IDCA_REGION— AWS 区域 (例如us-east-1)CA_NPM_REPO,CA_PYPI_REPO,CA_MAVEN_REPO— 各生态对应的仓库名称
企业基础架构
网络与连接
企业级 CA 证书
企业级 CA 证书
必需的 secrets
必需的 secrets
CORP_ROOT_CA_B64 — 来自你的企业 CA 的 Base64 编码 PEM 证书。可使用以下命令生成:cat corp-root-ca.crt | base64 -w0多个 CA 证书
多个 CA 证书
必需的 secrets
必需的 secrets
CORP_ROOT_CA_B64 — Base64 编码的主 CA 证书 - CORP_INTERMEDIATE_CA_B64 — Base64 编码的中间 CA 证书HTTP/HTTPS 代理
HTTP/HTTPS 代理
必需的 secrets
必需的 secrets
CORP_HTTP_PROXY— HTTP 代理 URL (例如:http://proxy.corp.example.com:8080) -CORP_HTTPS_PROXY— HTTPS 代理 URL -CORP_NO_PROXY— 以逗号分隔的绕过代理的主机列表 (例如:localhost,127.0.0.1,.corp.example.com)
身份验证代理
身份验证代理
必需的 secrets
必需的 secrets
PROXY_USER— 代理用户名 -PROXY_PASS— 代理密码 -PROXY_HOST— 代理主机名和端口 (例如proxy.corp.example.com:8080) -CORP_NO_PROXY— 不经代理的主机
CA 证书 + 代理(组合)
CA 证书 + 代理(组合)
必需的 secrets
必需的 secrets
CORP_ROOT_CA_B64— Base64 编码的 corporate CA certificate -CORP_HTTP_PROXY,CORP_HTTPS_PROXY— 代理 URL -CORP_NO_PROXY— 不走代理的主机
VPN 连接
VPN 连接
必需的 secrets
必需的 secrets
VPN_CONFIG_B64— 经过 Base64 编码的 OpenVPN 配置文件 (.ovpn) 。生成方式:cat corp.ovpn | base64 -w0VPN_AUTH_USER(可选) — VPN 用户名 (如果你的 VPN 需要用户名/密码认证)VPN_AUTH_PASS(可选) — VPN 密码
WG_CONFIG_B64— 经过 Base64 编码的 WireGuard 配置文件。生成方式:cat wg0.conf | base64 -w0
自定义 DNS 解析
自定义 DNS 解析
身份与安全
GPG 提交签名
GPG 提交签名
必需的 secrets
必需的 secrets
GPG_PRIVATE_KEY_B64— Base64 编码的 GPG 私钥。生成命令:gpg --export-secret-keys <key-id> | base64 -w0GIT_USER_NAME— Git 作者名称 (例如:Devin AI)GIT_USER_EMAIL— Git 作者邮箱。必须与 GPG 密钥上的某个 UID 匹配,否则 GitHub 不会验证该签名。
Git 身份和 SSH 密钥
Git 身份和 SSH 密钥
必需的 secrets
必需的 secrets
GIT_USER_NAME— Git 作者名称GIT_USER_EMAIL— Git 作者邮箱SSH_PRIVATE_KEY_B64— Base64 编码的 SSH 私钥。生成命令:cat ~/.ssh/id_ed25519 | base64 -w0SSH_KNOWN_HOSTS_B64— Base64 编码的 known hosts 条目。生成命令:ssh-keyscan git.corp.internal | base64 -w0SSH_CONFIG_B64(可选) — Base64 编码的 SSH 配置文件
系统配置
系统软件包
系统软件包
自定义环境变量
自定义环境变量
KEY=VALUE 逐行写入 $ENVRC 文件。写入 $ENVRC 的变量会自动导出到后续所有步骤以及 Devin 会话中 (类似于 GitHub Actions 的 $GITHUB_ENV) 。资源限制(ulimits)
资源限制(ulimits)
替换 APT 镜像源
替换 APT 镜像源
必需的 secrets
必需的 secrets
APT_MIRROR_URL — 你的内部 APT 镜像源的 URL (例如:https://artifactory.example.com/artifactory/ubuntu-remote) 高级用法
使用 direnv 管理环境变量
使用 direnv 管理环境变量
initialize 创建 .envrc 文件后,Direnv 会自动加载它们。.envrc 变量会自动加载。无需手动执行 source。按仓库切换 Node 版本
按仓库切换 Node 版本
.nvmrc 为每个仓库切换 Node.js 版本。nvm use 会从仓库根目录读取 .nvmrc。请确保你的仓库中包含该文件 (例如内容为 20) 。浏览器身份验证(Playwright)
浏览器身份验证(Playwright)
localhost:29229。使用 Playwright 脚本可自动完成基于浏览器的登录。scripts/login.py) :自定义系统工具与 PATH
自定义系统工具与 PATH
initialize 中安装系统软件包、自定义二进制文件,并配置 PATH。使用 GitHub Actions 设置工具
使用 GitHub Actions 设置工具
setup-node 和 setup-python 这类 action 会修改 PATH 和环境变量。某个 action 安装的二进制文件在后续所有步骤以及 maintenance 中都可用。仅支持基于 Node.js 的 GitHub Actions。不支持复合型 action 和基于 Docker 的 action。多个应用的本地 HTTPS 反向代理
多个应用的本地 HTTPS 反向代理
app.example.com、api.example.com 和 admin.example.com。在 initialize 中安装一个反向代理,并将每个主机名路由到不同的本地上游端口。Caddy 可在一个工具中同时处理路由和本地 TLS。Caddyfile 会将每个主机名映射到一个上游,而 tls internal 会通过 Caddy 内置的 CA 为每个主机名自动签发受信任的证书。caddy trust 会将该 CA 根证书安装到系统信任存储中,再将同一个根证书添加到 NSS 数据库后,浏览器也会信任它。通过蓝图编辑器中的 文件附件 部分上传你的 Caddyfile;之后即可通过 $FILE_CADDYFILE 使用它。/etc/hosts 循环会让 app.example.com 在会话内解析到 127.0.0.1。你在 Caddyfile 中写入的每个 hostname,都要在其中添加一条记录。全栈示例
企业全栈(Artifactory)
企业全栈(Artifactory)
必需的 secrets
必需的 secrets
CORP_ROOT_CA_B64— 经过 Base64 编码的企业 CA 证书CORP_HTTP_PROXY— HTTP 代理 URLCORP_HTTPS_PROXY— HTTPS 代理 URLCORP_NO_PROXY— 不走代理的主机
ARTIFACTORY_USER— Artifactory 用户名ARTIFACTORY_TOKEN— Artifactory API 令牌或密码ARTIFACTORY_MAVEN_URL— Maven 仓库 URL (例如,https://artifactory.example.com/artifactory/maven-virtual)ARTIFACTORY_PYPI_URL— PyPI 仓库 URL (例如,https://user:token@artifactory.example.com/artifactory/api/pypi/pypi-virtual/simple)ARTIFACTORY_NPM_URL— npm 仓库 URL (例如,https://artifactory.example.com/artifactory/api/npm/npm-virtual)ARTIFACTORY_DOCKER_URL— Docker 注册表 URL (例如,artifactory.example.com)
- 账户级 (
initialize): 证书与代理 - 组织级 (
initialize): 语言运行时安装 - 全组织范围 (
maintenance): 注册表凭据 (在构建过程中刷新,并在会话开始时提供给 Agent)
多语言与不同制品库
多语言与不同制品库
必需的 secrets
必需的 secrets
NEXUS_MAVEN_URL— Nexus Maven 仓库 URLNEXUS_USER— Nexus 用户名NEXUS_PASS— Nexus 密码GITHUB_PACKAGES_TOKEN— 具有read:packages作用域的 GitHub 个人访问令牌ARTIFACTORY_USER— Artifactory 用户名ARTIFACTORY_TOKEN— Artifactory API 令牌GIT_TOKEN— 用于 Go 私有模块的个人访问令牌
VPN + 证书 + 代理 + 编程语言
VPN + 证书 + 代理 + 编程语言
必需的 secrets
必需的 secrets
VPN_CONFIG_B64— Base64 编码的 OpenVPN 配置文件
CORP_ROOT_CA_B64— Base64 编码的企业 CA 证书CORP_HTTP_PROXY— HTTP 代理 URLCORP_HTTPS_PROXY— HTTPS 代理 URLCORP_NO_PROXY— 无需通过代理的主机
MAVEN_REGISTRY_URL— Maven 注册表 URLNPM_REGISTRY_URL— npm 注册表 URLPYPI_REGISTRY_HOST— PyPI 注册表主机名REGISTRY_USER— 注册表用户名 (用于 Maven 和 pip)REGISTRY_PASS— 注册表密码 (用于 Maven 和 pip)REGISTRY_TOKEN— npm 身份验证令牌
initialize 步骤的顺序很重要。 必须先配置 VPN (这样才能访问内部主机) ,然后配置 DNS (这样名称才能正确解析) ,再配置证书 (这样 HTTPS 才能正常工作) ,接着配置代理 (这样流量才能正确转发) ,最后配置语言运行时环境 (它们可能会从内部镜像下载) 。编写优质蓝图的技巧
- 先在会话中测试命令。 在将命令添加到蓝图之前,先在 Devin 会话中手动运行一遍。这样比等待完整构建周期更快。
- 一次性安装的工具用
initialize,依赖项用maintenance。 任何安装需要几分钟的内容 (编译器、大型二进制文件、全局工具) 都应放在initialize中。较快的依赖命令 (npm install、uv sync) 则应放在maintenance中。 - 让
maintenance命令保持快速。 尽量控制在 2 分钟以内。这些命令会在构建期间运行,并在会话开始时提供给 Agent。 - 环境变量请使用
$ENVRC。 不要写入.bashrc或.profile。$ENVRC是在不同步骤和会话之间设置变量的受支持方式。 - 给步骤命名。 使用带有
name字段的展开形式后,构建日志中的失败会更容易定位。 - monorepo 请使用 subshell。
(cd packages/foo && npm install)会在 subshell 中运行,因此后续步骤不会受目录变更影响。 - 使用
npm install,不要使用npm ci。npm ci会删除node_modules并从头重新安装,这对maintenance来说太慢。 - 敏感信息请使用 repo secrets。 请在仓库蓝图编辑器的 Secrets 选项卡中进行配置,而不要将其硬编码到蓝图中。

