Skip to main content
面向常见语言和用例的蓝图,可直接复制粘贴。将它们组合起来,即可构建完整的配置。示例基于 Linux 上的 Bash;请把示例中的主机、作用域和命令替换为你自己的内容。 每个字段的详细说明,请参阅蓝图参考。
Secrets: 在每个蓝图编辑器的 Secrets 选项卡中配置具名 secrets。构建步骤会收到适用的蓝图 secrets。在会话期间,请确保每条命令都能拿到所需的 secrets:代码仓库作用域的 secrets 需要显式的 exec 环境绑定,例如 env={"REGISTRY_TOKEN": "secret:repo:owner/repo:REGISTRY_TOKEN"}。参见 Secrets。切勿在蓝图中硬编码凭据。
构建步骤不是会话启动钩子。 initialize 和 maintenance 在构建快照时运行;maintenance 不会在会话启动时自动运行。knowledge 只是向 Devin 提供指示,并非可执行的钩子。不要把凭据留在持久化文件中,包括 $ENVRC。快照清理只会移除 Devin 注入的 secret 文件,不会移除你的命令写入的其他文件。请使用调用凭据的工具所支持的字面量变量引用,或在命令的环境中传入凭据。如果某个工具必须使用凭据文件,请为单次操作创建该文件,并在操作结束前清理掉。在会话中若有需要,再显式重复一次该设置过程。

快速开始

适用于最常见配置的精简蓝图。复制其中一个,粘贴到蓝图编辑器中即可。

仓库蓝图

按仓库设置的构建步骤、依赖管理和 Knowledge 条目。请在 Settings > Environment > Blueprints > [你的仓库] 中进行设置。

Python

适用于使用 uv 进行依赖管理的 Python 项目的推荐设置。

Node.js

使用 npm 的标准 Node.js 配置。
在 maintenance 中使用 npm install (不要用 npm ci) 。前者会执行增量更新,而 npm ci 会在每次运行该命令时删除 node_modules,并从头重新安装。

Go

标准 Go 模块配置。

Java

使用 Gradle 配置 Java 环境。
JDK 17 已预装在 Devin 的基础镜像中。如果默认的 OpenJDK 17 已满足需求,可跳过 JDK 安装步骤。

Ruby on Rails

基于 PostgreSQL 的 Rails 配置。

Rust

使用 cargo 的标准 Rust 配置。
Rust (通过 rustup) 和 Cargo已预装在 Devin 的基础镜像中。如果默认的稳定工具链已能满足需求,请跳过安装步骤。你只需拉取依赖。

Monorepo

包含 Node.js 前端和 Python 后端的 Monorepo。每个子项目都有各自的 knowledge 条目。
使用 subshell (cd dir && command),不要使用 cd dir && command,这样每个步骤之间都会重置工作目录。

私有包注册表

配置 package manager,使其从私有包注册表解析依赖。请在 Settings > Environment > Blueprints > Org-wide setup 中进行设置 (若仅有一个代码仓库需要,也可按代码仓库单独配置) 。
存储引用,而非展开后的凭据。 带引号的 heredoc 分隔符 (如 <<'EOF') 会在文件中保留变量引用。npm、Yarn Berry、Maven 和 Gradle 在运行时能够解析下面所示的引用。pip 不会展开 pip.conf 中的 shell 变量,因此请改用环境变量。Shell 配置文件必须与工具在同一条命令中显式 source;不要假定新开的 shell 会自动 source 这些文件或刷新凭据。直接写入持久化配置的 URL (例如 Cargo index、Docker mirror 或 APT mirror) 不得包含凭据。请将身份验证信息单独保存在各模板所示的 secrets 中。如果你此前使用的是会将凭据写入磁盘的旧模板,请删除这些文件,并从干净的基础镜像重建,而不要使用包含这些文件的快照。同时轮换可能已泄露的凭据。
如果你的私有包注册表使用企业 CA,请先确保已在企业级别安装 CA 证书。以下配置假定 HTTPS 信任关系已经建立。

Node.js 注册表

将 npm 配置为从私有 registry 解析带作用域的软件包 (例如 @myorg/*) ,同时公开软件包仍从默认的 npm registry 获取。
  • GITHUB_PACKAGES_TOKEN — 具有 read:packages 作用域的 Personal access token 或 GitHub App 令牌
将 @myorg 替换为你的 npm 作用域。常见的私有 registry URL:
  • GitHub Packages: https://npm.pkg.github.com
  • Artifactory: https://artifactory.example.com/artifactory/api/npm/npm-virtual
  • Nexus: https://nexus.example.com/repository/npm-group
  • GitLab: https://gitlab.example.com/api/v4/packages/npm
  • AWS CodeArtifact: https://<domain>.d.codeartifact.<region>.amazonaws.com/npm/<repo>

Python 软件包注册表

配置 pip 和 uv,使其从你的私有 PyPI registry (例如 Nexus、Artifactory) 解析软件包。
  • PYPI_REGISTRY_URL — 你的 PyPI 索引完整 URL,如有需要请包含凭据 (例如 https://user:token@nexus.example.com/repository/pypi-proxy/simple)
若要在 build 期间预热依赖,请在配置步骤之后向 maintenance 添加相同的 source ... && 命令。URL 凭据中的特殊字符需进行百分号编码。
常见的 PyPI registry URL 模式:
  • Artifactory: https://artifactory.example.com/artifactory/api/pypi/pypi-virtual/simple
  • Nexus: https://nexus.example.com/repository/pypi-proxy/simple
  • AWS CodeArtifact: https://aws:TOKEN@domain-owner.d.codeartifact.region.amazonaws.com/pypi/repo/simple/
  • Azure Artifacts: https://pkgs.dev.azure.com/org/project/_packaging/feed/pypi/simple
  • GitLab: https://gitlab.example.com/api/v4/groups/<group-id>/-/packages/pypi/simple

JVM 软件包注册表

安装 JDK,并将 Maven 配置为通过你的私有 registry (例如 Artifactory、Nexus) 镜像所有依赖解析。
JDK 17 已在 Devin 的基础镜像中预装。如果默认的 OpenJDK 17 足够使用,请跳过安装步骤。你只需安装 Maven 并配置 registry。
  • MAVEN_REGISTRY_URL — 你的 Maven registry URL (例如 https://artifactory.example.com/artifactory/maven-virtual)
  • REGISTRY_USER — registry 用户名
  • REGISTRY_PASS — registry 密码或 API 令牌
Maven 常见的注册表 URL 模式:
  • Artifactory: https://artifactory.example.com/artifactory/maven-virtual
  • Nexus: https://nexus.example.com/repository/maven-public
  • Azure Artifacts: https://pkgs.dev.azure.com/org/project/_packaging/feed/maven/v1
  • GitHub Packages: https://maven.pkg.github.com
  • GitLab: https://gitlab.example.com/api/v4/groups/<group-id>/-/packages/maven
  • AWS CodeArtifact: https://<domain>.d.codeartifact.<region>.amazonaws.com/maven/<repo>

其他软件包注册表

安装 Go,并将其配置为通过私有 module 代理 (例如 Athens、Artifactory 或某个 GOPROXY 端点) 解析 module。
  • GO_PROXY_URL — 你的 Go module 代理的 URL (例如 https://athens.corp.internal)
通过 Git 集成连接 Git provider,并授予其访问托管你私有 module 的仓库的权限。使用普通的 HTTPS Git URL,并配合 Devin 已配置的身份验证。不要在 Git URL 重写规则中嵌入令牌。
若要在构建期间预热模块缓存,请将该命令添加到代码仓库蓝图的 maintenance 中,那里可以访问到 go.mod。请勿在组织级设置 (org-wide setup) 中运行该命令,因为它会在仓库克隆之前执行。
常见的 Go 代理 URL 格式:
  • Artifactory: https://artifactory.example.com/artifactory/go-virtual
  • Nexus: https://nexus.example.com/repository/go-proxy
  • Athens: https://athens.corp.internal
配置 NuGet 从私有源解析软件包。
  • NUGET_SOURCE_URL — 你的 NuGet 源的 URL
  • NuGetPackageSourceCredentials_private — 采用 NuGet 环境变量格式的源凭据:Username=any;Password=<PAT> (使用你的源所要求的用户名)
配置 Docker 从私有容器注册表拉取镜像。Docker login 会将凭据写入其配置目录。请为每次操作使用独立的目录,即使拉取失败也要将其删除。如果在同一会话中还需要拉取其他镜像,请重新执行一次登录并拉取的流程。
  • 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 令牌
若要将镜像缓存到快照中,请在构建步骤中放入完整的同一段子 shell。不要把登录和清理拆分到不同步骤,并在生成镜像前确认清理已成功完成。注册表镜像源 URL 中不得包含凭据。
常见的容器注册表 URL:
  • Amazon ECR: <account-id>.dkr.ecr.<region>.amazonaws.com
  • Azure Container Registry: <name>.azurecr.io
  • Google Artifact Registry: <region>-docker.pkg.dev
  • GitHub Container Registry: ghcr.io
  • GitLab Container Registry: registry.gitlab.example.com
  • Nexus: https://nexus.example.com:8443
  • JFrog: <name>.jfrog.io
配置 Cargo 以从 private registry 解析 crates。
Rust (通过 rustup) 与 Cargo 已预装在 Devin 的基础 image 中。如果 default 的 stable 工具链已经够用,可跳过安装步骤,你只需完成 registry 配置。
  • CARGO_REGISTRY_INDEX — private registry 索引的 URL (例如 sparse+https://cargo.corp.internal/api/v1/crates/)
  • CARGO_REGISTRIES_PRIVATE_TOKEN — 名为 private 的 registry 的身份验证令牌
registry 索引 URL 不得包含凭据。Cargo 的 cargo:token 提供商会从环境中读取指定 registry 的令牌;请勿在构建步骤中运行 cargo login。
如果你只是想添加一个私有 registry,而不替换 crates.io,请删除 [source.crates-io] 和 [source.private] 小节,改用 cargo install --registry private,或在 Cargo.toml 中写入 [dependencies] my-crate = { version = "1.0", registry = "private" }。
安装 Ruby 并配置 Bundler,使其从私有 gem 服务器解析 gem。
  • GEM_SERVER_URL — 你的私有 gem 服务器的 URL (例如 https://artifactory.example.com/artifactory/api/gems/gems-virtual)
  • BUNDLE_ARTIFACTORY__EXAMPLE__COM — 用于 artifactory.example.com 的 username:password;请将变量名改为与你的 gem 服务器相匹配
使用不含凭据的 GEM_SERVER_URL。对于 Bundler 的凭据变量,请将 hostname 转为大写并加上 BUNDLE_ 前缀,同时把每个点替换为 __,每个连字符替换为 ___。
常见的 gem server URL 形式:
  • Artifactory: https://artifactory.example.com/artifactory/api/gems/gems-virtual
  • Nexus: https://nexus.example.com/repository/rubygems-proxy
  • Gemfury: https://gem.fury.io/<org>
安装 PHP 并配置 Composer,以便从私有 Packagist 或 Satis registry 解析软件包。
  • COMPOSER_REGISTRY_URL — 你的私有 Composer registry 的 URL (例如 https://repo.packagist.com/<org>)
  • COMPOSER_AUTH — 该 registry 主机的 JSON 凭据,例如 {"http-basic":{"repo.packagist.com":{"username":"<user>","password":"<token>"}}}
使用不含凭据的 COMPOSER_REGISTRY_URL。
常见的 Composer registry URL 形式:
  • Artifactory: https://artifactory.example.com/artifactory/api/composer/packagist-virtual
  • Nexus: https://nexus.example.com/repository/packagist-proxy
  • Private Packagist: https://repo.packagist.com/<org>
  • Satis: https://satis.corp.internal
AWS CodeArtifact 令牌通常在 12 小时后过期。请创建一个包含字面引用的脚本,然后在运行 npm、pip 或 Maven 的同一条 shell 命令中显式 source 该脚本来获取令牌。将脚本保存在蓝图中并不会在会话启动时自动执行它。
Devin 的基础 image 上已预装 awscli。你只需完成令牌刷新和 registry 配置。
  • AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY — 具备 codeartifact:GetAuthorizationToken 和 sts:GetServiceBearerToken 权限的 IAM 凭据
  • CA_DOMAIN — 你的 CodeArtifact 域名
  • CA_DOMAIN_OWNER — 拥有该域的 AWS 账户 ID
  • CA_REGION — AWS 区域 (例如 us-east-1)
  • CA_NPM_REPO、CA_PYPI_REPO、CA_MAVEN_REPO — 各生态对应的代码仓库名称
若要在快照中预热依赖缓存,请将相应的 source ... && 命令添加为后续的构建步骤。获取到的令牌仅存在于该 shell 的环境中;请勿通过 aws codeartifact login、使用已展开令牌的 npm config set 或包含凭据的 pip.conf 将其持久化。

企业基础架构

适用于所有组织和代码仓库的机器级基础架构。可在 Settings > Devin’s base environment (企业范围) 或 Settings > Environment > Blueprints > Org-wide setup (组织范围) 中进行设置。

网络与连接

你的组织为内部服务使用私有证书颁发机构 (CA) 。Devin 需要根证书,才能通过 HTTPS 访问内部制品库和工具。
  • CORP_ROOT_CA_B64 — 来自你的企业 CA 的 Base64 编码 PEM 证书。可使用以下命令生成:cat corp-root-ca.crt | base64 -w0
这些输入是公共证书。openssl x509 只会写出解析后的证书,因此即便其中不慎包含了私钥,也不会被复制到信任存储中。请参照下一个示例,分别提供每个 CA 证书。
如果你的组织使用多个 CA 证书 (例如,不同的内部服务分别使用不同的 CA) 。
  • CORP_ROOT_CA_B64 — Base64 编码的主 CA 证书
  • CORP_INTERMEDIATE_CA_B64 — Base64 编码的中间 CA 证书
使所有网络流量都通过企业代理转发。
  • 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)
如果你的企业代理需要通过用户名/密码进行身份验证。
  • PROXY_USER — 代理用户名
  • PROXY_PASS — 代理密码
  • PROXY_HOST — 代理主机名和端口 (例如 proxy.corp.example.com:8080)
  • CORP_NO_PROXY — 不经代理的主机
请对代理用户名和密码中的特殊字符进行百分号编码。Git 和 npm 可以使用代理环境变量;不要将包含凭据的代理 URL 写入它们的持久化配置中。
适用于同时需要 corporate CA 和代理的环境的组合配置。这在 Enterprise 环境中很常见:内部服务使用私有证书,且所有流量都必须通过代理转发。
  • CORP_ROOT_CA_B64 — Base64 编码的 corporate CA certificate
  • CORP_HTTP_PROXY, CORP_HTTPS_PROXY — 代理 URL
  • CORP_NO_PROXY — 不走代理的主机
你的私有仓库、Git 服务器或其他内部服务只能通过 VPN 访问。请在蓝图中安装 VPN 客户端。仅在需要的操作中显式建立隧道,并在完成后断开连接并删除凭据文件。
OpenVPN:
  • VPN_CONFIG_B64 — 经过 Base64 编码的 OpenVPN 配置文件 (.ovpn) 。生成方式:cat corp.ovpn | base64 -w0
  • VPN_AUTH_USER (可选) — VPN 用户名 (如果你的 VPN 需要用户名/密码认证)
  • VPN_AUTH_PASS (可选) — VPN 密码
WireGuard:
  • WG_CONFIG_B64 — 经过 Base64 编码的 WireGuard 配置文件。生成方式:cat wg0.conf | base64 -w0
OpenVPN:
在具备 VPN secrets 的会话中显式运行此块。将 curl 命令替换为需要通过该隧道完成的工作。配置中必须以 inline 方式包含所需的证书和密钥,并使用 dev tun0;请勿启用常驻的 VPN 服务。
WireGuard:
在 WG_CONFIG_B64 可用的情况下显式运行此块,并将 curl 命令替换为你的操作:
如果 snapshot build 需要 VPN 访问,请将所有依赖工作放在同一个块中,以便在生成镜像前完成清理。仅仅把凭据写入操作移到 maintenance 并不会使其变为临时性的。不要对处于 active 状态的 tunnel 或 private VPN 配置制作 snapshot。
有关 VPN 设置的更多信息,请参阅 VPN configuration。
你的内部服务使用无法通过公共 DNS 解析的私有 DNS 名称。

身份与安全

你的组织要求对所有 Git 提交进行签名,并且你希望 GitHub 将 Devin 的提交标记为 Verified。
  • GPG_PRIVATE_KEY_B64 — Base64 编码的 GPG 私钥。生成方式:gpg --export-secret-keys <key-id> | base64 -w0
  • GPG_SIGNING_KEY — 签名密钥的完整指纹
  • GIT_USER_NAME — Git 作者名称 (例如 Devin AI)
  • GIT_USER_EMAIL — Git 作者邮箱。必须与 GPG 密钥上的某个 UID 匹配,否则 GitHub 不会验证签名。
同时请将配对的公钥上传到 Devin 推送时所用凭据对应的 GitHub 账户 (位于 GitHub Settings > SSH and GPG keys) 。只有当签名公钥已注册在该提交的作者账户下时,GitHub 才会将提交标记为 Verified。
请勿在快照构建期间导入签名私钥。在暂存好目标更改后,在可访问上述 secrets 的会话中显式运行以下块。它会使用临时密钥环,以及仅对本次提交生效的 Git 设置:
如果你的密钥需要口令,请在操作过程中完成已批准的 GPG agent/pinentry 流程。请勿将口令或密钥环保存到蓝图或快照中。后续提交或创建签名标签时,请重复上述临时密钥环的设置步骤。
配置 Devin 的 Git 身份,以及用于访问私有 Git 服务器的 SSH 密钥。对于受支持的 Git 提供商,建议优先使用 Git 集成。如果某个服务器必须使用显式的 SSH 密钥,请不要将私钥带入蓝图构建,仅在下面的会话操作中使用。
  • GIT_USER_NAME — Git 作者名称
  • GIT_USER_EMAIL — Git 作者邮箱
  • SSH_PRIVATE_KEY_B64 — Base64 编码的 SSH 私钥。生成方式:cat ~/.ssh/id_ed25519 | base64 -w0
  • SSH_KNOWN_HOSTS_B64 — Base64 编码的 known hosts 条目,需与服务器管理员公布的主机密钥指纹核对验证
在会话中显式运行以下块,并将其中的 Git URL 替换为你自己的服务器和代码仓库:
如果需要自定义 SSH 选项,请直接加在这条命令中,不要把私钥复制到持久化的 SSH 配置或主目录中。每次操作都重复执行该设置步骤。

系统配置

安装默认 Devin 镜像中不包含的系统级软件包 (例如,用于图像处理或 PDF 生成的原生库) 。
设置在每个会话中都可用的持久、非敏感环境变量。不要将敏感值或派生的凭据写入 $ENVRC。推荐的做法是将 KEY=VALUE 逐行写入 $ENVRC 文件。写入 $ENVRC 的变量会自动导出到后续所有步骤以及 Devin 会话中 (类似于 GitHub Actions 的 $GITHUB_ENV) 。
你也可以将环境变量写入 /etc/profile.d/ 脚本,使其在整个系统范围内生效:
这两种方式都可以。$ENVRC 更简单,也是大多数情况下推荐的做法。
默认基础镜像的区域设置可能有误。请配置区域设置和时区,以避免构建工具、Java、Python 和 Git 发出警告。
Java、Gradle 和 Node.js 构建经常会达到默认的 1024 个打开文件数限制。请调高该限制,以避免构建失败。
在隔离或受限环境中,将默认的 Ubuntu APT 软件源替换为内部镜像源。
  • APT_MIRROR_URL — 你的内部 APT 镜像源的 URL (例如:https://artifactory.example.com/artifactory/ubuntu-remote)
常见的 APT 镜像 URL 格式:
  • Artifactory: https://artifactory.example.com/artifactory/ubuntu-remote
  • Nexus: https://nexus.example.com/repository/ubuntu-proxy

高级用法

Devin 的基础环境中已包含 direnv。使用 initialize 创建 .envrc 文件后,Direnv 会自动加载它们。
direnv 已预先集成到 Devin 的 shell 中,因此 .envrc 变量会自动加载。无需手动执行 source。
对于敏感环境变量 (API key、令牌、数据库密码) ,请使用 repo secrets,而不是 .envrc 文件,并将它们显式绑定到需要用到它们的会话命令上。在构建过程中把某个 secret 展开写入文件,仍有可能将其带入快照中。
使用 nvm (已预装) 通过 .nvmrc 为每个仓库切换 Node.js 版本。
nvm use 会从仓库根目录读取 .nvmrc。请确保你的仓库中包含该文件 (例如内容为 20) 。
在会话期间,Devin 会提供一个 Chrome 浏览器,其 CDP 端点为 localhost:29229。使用 Playwright 脚本可自动完成基于浏览器的登录。
该浏览器仅在会话期间可用,不适用于快照构建。请在 initialize 中安装 Playwright,并将登录脚本保存在你的代码仓库中。
示例登录脚本 (scripts/login.py) :
将登录凭据以 secrets 的形式存储,不要写入源代码。对于需要长期保持的身份验证,请将登录脚本提交到 .agents/skills/,以便 Devin 自动重新验证身份。
在 initialize 中安装系统软件包、自定义二进制文件,并配置 PATH。
Devin 支持在蓝图的 initialize 部分中直接运行 GitHub Actions。这对于通过 CI 所使用的同一套 actions 安装特定版本的工具非常有用。
setup-node 和 setup-python 这类 action 会修改 PATH 和环境变量。某个 action 安装的二进制文件在后续所有步骤以及 maintenance 中都可用。支持 Node.js 和复合型 action;Docker action 仅在 Linux 构建中受支持。uses 步骤无法在 maintenance 中运行。参见 GitHub Actions 限制。
你无需依赖 GitHub Actions 来完成基础工具设置。直接使用 shell 命令 (nvm install 20、curl ... | sh、apt-get install) 同样有效,而且通常更简单。只有在你希望与 CI 配置完全一致,或者需要 setup-java 这类可处理多个发行版的 action 所带来的便利时,GitHub Actions 才更有用。
通过 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 使用它。
Caddyfile
/etc/hosts 循环会让 app.example.com 在会话内解析到 127.0.0.1。你在 Caddyfile 中写入的每个 hostname,都要在其中添加一条记录。
要添加一个服务,请在 Caddyfile 中追加一个三行代码块,并在 /etc/hosts 循环中添加一条记录,然后通过 HTTPS 访问对应的 hostname。Caddy 会在首次请求时签发证书,因此无需为每个 app 单独生成证书。

全栈示例

这些示例展示了企业级和组织级配置如何组合使用。实际使用时,通常会按不同作用域拆分。这里将它们集中展示,供参考。
一个完整的企业环境示例:企业 CA 证书、代理、Java (Maven)、Python (pip/uv)、Node.js (npm) 和 Docker,全部指向同一个 Artifactory 实例。
网络与信任 (账户级) :
  • CORP_ROOT_CA_B64 — 经过 Base64 编码的企业 CA 证书
  • CORP_HTTP_PROXY — HTTP 代理 URL
  • CORP_HTTPS_PROXY — HTTPS 代理 URL
  • CORP_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): 包含字面引用的注册表配置
  • 会话命令: 显式提供 secrets、加载环境配置,并为单次 Docker 操作登录
此处合并显示以供参考:
在此示例中,所有仓库都指向同一个 Artifactory 实例,但 URL 路径不同。每种软件包生态系统都有各自的端点格式。即使是同一个仓库,Maven、PyPI、npm 和 Docker 的 URL 也各不相同。
当不同语言分别使用不同的私有仓库时 (例如,Maven 使用 Nexus,npm 使用 GitHub Packages,Python 使用 Artifactory) 。
  • NEXUS_MAVEN_URL — Nexus Maven 仓库 URL
  • NEXUS_USER — Nexus 用户名
  • NEXUS_PASS — Nexus 密码
  • GITHUB_PACKAGES_TOKEN — 具有 read:packages 作用域的 GitHub 个人访问令牌
  • ARTIFACTORY_USER — Artifactory 用户名
  • ARTIFACTORY_TOKEN — Artifactory API 令牌
通过 Git 集成连接你的 Git provider,并授予其访问托管这些 Go 模块的仓库的权限。
在完全气隙环境中,Devin 无法访问任何公共 URL。所有工具、运行时和软件包都必须来自内部镜像源。
证书:
  • CORP_ROOT_CA_B64 — Base64 编码的企业 CA 证书
镜像访问:
  • APT_MIRROR_URL — 内部 Ubuntu APT 镜像 URL
  • MIRROR_USER — 用于镜像身份验证的用户名
  • MIRROR_PASS — 用于镜像身份验证的密码
  • JDK_TARBALL_URL — 从内部镜像下载 JDK tarball 的 URL
  • NODE_TARBALL_URL — 从内部镜像下载 Node.js tarball 的 URL
软件包注册表:
  • INTERNAL_MAVEN_URL — 内部 Maven 注册表 URL
  • INTERNAL_NPM_URL — 内部 npm 注册表 URL
  • INTERNAL_PYPI_URL — 内部 PyPI 注册表 URL
在气隙环境中,Devin 所需的所有工具 (语言运行时、CLI 工具等) 都必须能从你的内部镜像源获取。公共软件仓库和下载站点均无法访问。
一个综合性的企业级配置示例,集成了 VPN 工具、证书、代理配置及多语言支持。该蓝图负责安装工具,并以字面引用的方式存储配置。在执行需要访问内部资源的操作时,请显式连接 VPN。
VPN:
  • VPN_CONFIG_B64 — Base64 编码的 OpenVPN 配置文件
网络与信任:
  • CORP_ROOT_CA_B64 — Base64 编码的企业 CA 证书
  • CORP_HTTP_PROXY — HTTP 代理 URL
  • CORP_HTTPS_PROXY — HTTPS 代理 URL
  • CORP_NO_PROXY — 无需通过代理的主机
注册表凭据:
  • MAVEN_REGISTRY_URL — Maven 注册表 URL
  • NPM_REGISTRY_URL — npm 注册表 URL
  • PYPI_REGISTRY_HOST — PyPI 注册表主机名
  • REGISTRY_USER — 注册表用户名 (用于 Maven 和 pip)
  • REGISTRY_PASS — 注册表密码 (用于 Maven 和 pip)
  • REGISTRY_TOKEN — npm 身份验证令牌
需要具备引导访问能力。 在建立隧道之前,必须已预装 OpenVPN 客户端或能够进行安装。VPN_CONFIG_B64 必须包含内联的证书/密钥,使用 dev tun0,并且无需交互式身份验证即可连接。运行时下载在同一个隧道生命周期内完成,并显式加载代理环境。会话操作请重复 网络与连通性 中的 VPN 设置/清理块;蓝图不会在会话开始时重新连接 VPN。

编写优质蓝图的技巧

  • 先在会话中测试命令。 在将命令添加到蓝图之前,先在 Devin 会话中手动运行一遍。这样比等待完整构建周期更快。
  • 一次性安装的工具用 initialize,依赖项用 maintenance。 任何安装需要几分钟的内容 (编译器、大型二进制文件、全局工具) 都应放在 initialize 中。较快的依赖命令 (npm install、uv sync) 则应放在 maintenance 中。
  • 让 maintenance 命令保持快速。 尽量控制在 2 分钟以内。这些命令会在构建期间运行,并在会话开始时提供给 Agent。
  • 非敏感的环境变量请使用 $ENVRC。 不要将凭据或派生令牌写入 $ENVRC、.bashrc 或 .profile。请在需要它的命令中显式 source 依赖 secrets 的 shell 设置。
  • 给步骤命名。 使用带有 name 字段的展开形式后,构建日志中的失败会更容易定位。
  • monorepo 请使用 subshell。 (cd packages/foo && npm install) 会在 subshell 中运行,因此后续步骤不会受目录变更影响。
  • 使用 npm install,不要使用 npm ci。 npm ci 会删除 node_modules 并从头重新安装,这对 maintenance 来说太慢。
  • 敏感信息请使用 代码仓库 secrets。 请在仓库蓝图编辑器的 Secrets 选项卡中进行配置,而不要将其硬编码到蓝图中。
有关语法细节,请参阅 蓝图参考。有关构建失败的故障排除,请参阅 声明式配置 > 故障排除。