exec, como env={"REGISTRY_TOKEN": "secret:repo:owner/repo:REGISTRY_TOKEN"}. Consulta Secrets. Nunca incluyas credenciales directamente en tu blueprint.Inicio rápido
Plantillas mínimas para las configuraciones más habituales. Copia uno, pégalo en el editor de plantillas y listo.Proyecto Node.js
Proyecto Node.js
Proyecto Python
Proyecto Python
Full-stack (Node + Python)
Full-stack (Node + Python)
Plantillas de repositorios
Pasos de compilación para cada repositorio, gestión de dependencias y entradas de Knowledge. Configúralos en Settings > Environment > Blueprints > [tu repo].Python
- uv (recomendado)
- pip + venv
Node.js
- npm
- pnpm
npm install (no npm ci) en maintenance. Realiza una actualización incremental, mientras que npm ci elimina node_modules y reinstala todo desde cero cada vez que se ejecuta el comando.Go
Configuración estándar de Go con módulos.Java
- Gradle
- Maven
Ruby on Rails
Configuración de Rails con PostgreSQL.Rust
Configuración estándar de Rust con Cargo.Monorepos
- Varios lenguajes
- Múltiples versiones de JDK
Registros privados de paquetes
Configura los gestores de paquetes para resolver dependencias desde registros privados. Define esto en Settings > Environment > Blueprints > Org-wide setup (o por repositorio, si solo uno lo necesita).Registros de Node.js
- npm (scoped)
- npm (réplica completa)
- pnpm
- Yarn
@myorg/*) desde un registro privado, mientras que los paquetes públicos se siguen obteniendo del registro predeterminado de npm.Secretos requeridos
Secretos requeridos
GITHUB_PACKAGES_TOKEN— Personal Access Token o token de GitHub App con ámbitoread:packages
Registros de Python
- pip / uv
- Poetry
Secretos requeridos
Secretos requeridos
PYPI_REGISTRY_URL— URL completa de tu índice de PyPI, incluidas las credenciales si son necesarias (p. ej.,https://user:token@nexus.example.com/repository/pypi-proxy/simple)
source ... && a maintenance después del paso de configuración. Codifica en porcentaje los caracteres especiales de las credenciales en la URL.Registro de JVM
- Maven
- Gradle
Secretos requeridos
Secretos requeridos
MAVEN_REGISTRY_URL— URL de tu registro de Maven (p. ej.,https://artifactory.example.com/artifactory/maven-virtual)REGISTRY_USER— Nombre de usuario del registroREGISTRY_PASS— Contraseña del registro o token de API
Otros registros
Proxy de módulos Go
Proxy de módulos Go
Secretos requeridos
Secretos requeridos
GO_PROXY_URL— URL de tu proxy de módulos de Go (p. ej.,https://athens.corp.internal)
maintenance del blueprint del repositorio, donde go.mod está disponible. No lo ejecutes en la configuración de la organización, ya que esta se ejecuta antes de clonar los repositorios..NET / NuGet
.NET / NuGet
Secretos requeridos
Secretos requeridos
NUGET_SOURCE_URL— URL de tu feed de NuGetNuGetPackageSourceCredentials_private— Credenciales del feed en el formato de entorno de NuGet:Username=any;Password=<PAT>(usa el nombre de usuario que requiera tu feed)
Docker
Docker
Secretos requeridos
Secretos requeridos
DOCKER_MIRROR_URL(opcional) — URL de tu mirror de Docker Hub (p. ej.,https://mirror.corp.internal)DOCKER_REGISTRY_URL— URL de tu registry de contenedores privado (p. ej.,registry.corp.internal:5000)DOCKER_REGISTRY_USER— Nombre de usuario del registryDOCKER_REGISTRY_PASS— Contraseña del registry o token de API
Rust / Cargo
Rust / Cargo
Secretos requeridos
Secretos requeridos
CARGO_REGISTRY_INDEX— URL del índice del registro privado (p. ej.,sparse+https://cargo.corp.internal/api/v1/crates/)CARGO_REGISTRIES_PRIVATE_TOKEN— Token de autenticación para el registro llamadoprivate
cargo:token de Cargo lee el token del registro indicado desde el entorno; no ejecutes cargo login en un paso de compilación.Ruby / Bundler
Ruby / Bundler
Secretos requeridos
Secretos requeridos
GEM_SERVER_URL— URL de tu servidor de gems privado (por ejemplo,https://artifactory.example.com/artifactory/api/gems/gems-virtual)BUNDLE_ARTIFACTORY__EXAMPLE__COM—username:passwordparaartifactory.example.com; cambia el nombre de la variable para que coincida con tu servidor de gems
GEM_SERVER_URL sin credenciales. Para la variable de credenciales de Bundler, antepón BUNDLE_ al nombre de host en mayúsculas, reemplaza cada punto por __ y cada guion por ___.PHP / Composer
PHP / Composer
Secretos requeridos
Secretos requeridos
COMPOSER_REGISTRY_URL— URL de tu registry privado de Composer (por ejemplo,https://repo.packagist.com/<org>)COMPOSER_AUTH— credenciales en JSON para el host del registry, como{"http-basic":{"repo.packagist.com":{"username":"<user>","password":"<token>"}}}
COMPOSER_REGISTRY_URL sin credenciales.Renovación del token de AWS CodeArtifact
Renovación del token de AWS CodeArtifact
source en el mismo comando de shell que npm, pip o Maven para obtener un token. Guardar el script en un blueprint no hace que se ejecute al inicio de la sesión.awscli viene preinstalado en la imagen base de Devin. Solo necesitas la renovación del token y la configuración del registro.Secretos requeridos
Secretos requeridos
AWS_ACCESS_KEY_IDyAWS_SECRET_ACCESS_KEY— credenciales de IAM con los permisoscodeartifact:GetAuthorizationTokenysts:GetServiceBearerTokenCA_DOMAIN— el nombre de tu dominio de CodeArtifactCA_DOMAIN_OWNER— el ID de la cuenta de AWS propietaria del dominioCA_REGION— región de AWS (por ejemplo,us-east-1)CA_NPM_REPO,CA_PYPI_REPO,CA_MAVEN_REPO— nombres de los repositorios de cada ecosistema
source ... && correspondiente como un paso de compilación posterior. El token obtenido permanece en el environment de ese shell; no lo hagas persistente con aws codeartifact login, con npm config set usando un token expandido ni con un pip.conf que contenga credenciales.Infraestructura de Enterprise
Infraestructura a nivel de máquina que se aplica a todas las organizaciones y repositorios. Configúrala en Enterprise Settings > Environments > Blueprint (a nivel Enterprise) o Settings > Environment > Blueprints > configuración de la organización (a nivel de organización).Red y conectividad
Certificado de autoridad de certificación corporativa
Certificado de autoridad de certificación corporativa
Secretos requeridos
Secretos requeridos
CORP_ROOT_CA_B64— Certificado PEM codificado en Base64 de tu CA corporativa. Genéralo con:cat corp-root-ca.crt | base64 -w0
openssl x509 escribe únicamente el certificado analizado, por lo que una clave privada incluida accidentalmente no se copia en el almacén de confianza. Proporciona cada certificado de CA por separado, como en el siguiente ejemplo.Múltiples certificados de CA
Múltiples certificados de CA
Secretos requeridos
Secretos requeridos
CORP_ROOT_CA_B64— certificado de CA principal codificado en Base64CORP_INTERMEDIATE_CA_B64— certificado de CA intermedio codificado en Base64
Proxy HTTP/HTTPS
Proxy HTTP/HTTPS
Secretos requeridos
Secretos requeridos
CORP_HTTP_PROXY— URL del proxy HTTP (p. ej.,http://proxy.corp.example.com:8080)CORP_HTTPS_PROXY— URL del proxy HTTPSCORP_NO_PROXY— Lista de hosts separados por comas para omitir el proxy (p. ej.,localhost,127.0.0.1,.corp.example.com)
Proxy con autenticación
Proxy con autenticación
Secretos requeridos
Secretos requeridos
PROXY_USER— Nombre de usuario del proxyPROXY_PASS— Contraseña del proxyPROXY_HOST— Host y puerto del proxy (p. ej.,proxy.corp.example.com:8080)CORP_NO_PROXY— Hosts que deben omitir el proxy
Certificado de la CA + proxy (combinados)
Certificado de la CA + proxy (combinados)
Secretos requeridos
Secretos requeridos
CORP_ROOT_CA_B64— Certificado de CA corporativa codificado en Base64CORP_HTTP_PROXY,CORP_HTTPS_PROXY— URL del proxyCORP_NO_PROXY— Hosts que deben omitir el proxy
Conexión VPN
Conexión VPN
Secretos requeridos
Secretos requeridos
VPN_CONFIG_B64— Archivo de configuración de OpenVPN codificado en Base64 (.ovpn). Genéralo con:cat corp.ovpn | base64 -w0VPN_AUTH_USER(opcional) — Nombre de usuario de la VPN, si tu VPN requiere autenticación con nombre de usuario y contraseñaVPN_AUTH_PASS(opcional) — Contraseña de la VPN
WG_CONFIG_B64— Archivo de configuración de WireGuard codificado en Base64. Genéralo con:cat wg0.conf | base64 -w0
curl por el trabajo que necesita el túnel. La configuración debe incluir inline los certificados y las claves requeridos y usar dev tun0; no habilites un servicio de VPN persistente.WG_CONFIG_B64 disponible, sustituyendo el comando curl por tu operación:maintenance no basta para hacerlas temporales. No crees instantáneas de un túnel activo ni de una configuración de VPN privada.Resolución de DNS personalizada
Resolución de DNS personalizada
Identidad y seguridad
Firma de commits con GPG
Firma de commits con GPG
Secretos requeridos
Secretos requeridos
GPG_PRIVATE_KEY_B64— clave privada GPG codificada en Base64. Genérala con:gpg --export-secret-keys <key-id> | base64 -w0GPG_SIGNING_KEY— huella digital completa de la clave de firmaGIT_USER_NAME— nombre del autor de Git (p. ej.,Devin AI)GIT_USER_EMAIL— correo del autor de Git. Debe coincidir con un UID de la clave GPG; de lo contrario, GitHub no verificará la firma.
Identidad de Git y claves SSH
Identidad de Git y claves SSH
Secretos requeridos
Secretos requeridos
GIT_USER_NAME— nombre del autor de GitGIT_USER_EMAIL— correo del autor de GitSSH_PRIVATE_KEY_B64— clave privada SSH codificada en Base64. Genérala con:cat ~/.ssh/id_ed25519 | base64 -w0SSH_KNOWN_HOSTS_B64— entradas de known hosts codificadas en Base64 y verificadas con las huellas digitales de claves de host publicadas por el administrador de tu servidor
Configuración del sistema
Paquetes del sistema
Paquetes del sistema
Variables de entorno personalizadas
Variables de entorno personalizadas
$ENVRC.La forma recomendada es escribir líneas KEY=VALUE en el archivo $ENVRC. Las variables escritas en $ENVRC se exportan automáticamente para todos los pasos posteriores y para la sesión de Devin (de forma similar a $GITHUB_ENV de GitHub Actions).Configuración regional y zona horaria
Configuración regional y zona horaria
Límites de recursos (ulimits)
Límites de recursos (ulimits)
Reemplazo del mirror de APT
Reemplazo del mirror de APT
Secretos requeridos
Secretos requeridos
APT_MIRROR_URL— URL de tu mirror interno de APT (p. ej.,https://artifactory.example.com/artifactory/ubuntu-remote)
Patrones avanzados
Variables de entorno con direnv
Variables de entorno con direnv
initialize para crear archivos .envrc. Direnv los carga automáticamente..envrc se cargan automáticamente. No necesitas hacer source manualmente.Cambio de versión de Node según el repositorio
Cambio de versión de Node según el repositorio
.nvmrc.nvm use lee el archivo .nvmrc de la raíz del repositorio. Asegúrate de que tu repositorio incluya ese archivo (p. ej., con 20).Herramientas personalizadas del sistema y PATH
Herramientas personalizadas del sistema y PATH
initialize.GitHub Actions para configurar herramientas
GitHub Actions para configurar herramientas
initialize de un blueprint. Esto es útil para instalar versiones específicas de herramientas mediante las mismas acciones que usa tu CI.setup-node y setup-python modifican PATH y las variables de entorno. Los binarios instalados por una acción están disponibles en todos los pasos posteriores y en maintenance. Se admiten las acciones de Node.js y las compuestas; las acciones de Docker solo se admiten en compilaciones de Linux. Los pasos uses no pueden ejecutarse en maintenance. Consulta las limitaciones de GitHub Actions.Proxy inverso HTTPS local para múltiples apps
Proxy inverso HTTPS local para múltiples apps
app.example.com, api.example.com y admin.example.com. Instala un único proxy inverso en initialize y enruta cada hostname a un puerto upstream local distinto.Caddy gestiona el enrutamiento y el TLS local en una sola herramienta. Un Caddyfile asigna cada hostname a un upstream, y tls internal emite automáticamente un certificado de confianza para cada hostname desde la CA integrada de Caddy. caddy trust instala esa raíz de CA en el almacén de confianza del sistema, y agregar la misma raíz a la base de datos NSS permite que el navegador la acepte.Sube tu Caddyfile mediante la sección de Archivos adjuntos del editor de blueprint; después estará disponible como $FILE_CADDYFILE./etc/hosts es lo que hace que app.example.com se resuelva como 127.0.0.1 dentro de la sesión. Agrega una entrada por cada hostname que incluyas en el Caddyfile.Ejemplos de full stack
Estos ejemplos muestran cómo se combinan las configuraciones de Enterprise y a nivel de org. En la práctica, se dividirían entre distintos ámbitos. Se muestran juntas aquí como referencia.Stack empresarial completo (Artifactory)
Stack empresarial completo (Artifactory)
Secretos requeridos
Secretos requeridos
CORP_ROOT_CA_B64— certificado de la CA corporativa codificado en Base64CORP_HTTP_PROXY— URL del proxy HTTPCORP_HTTPS_PROXY— URL del proxy HTTPSCORP_NO_PROXY— hosts que deben omitir el proxy
ARTIFACTORY_USER— nombre de usuario de ArtifactoryARTIFACTORY_TOKEN— token de API o contraseña de ArtifactoryARTIFACTORY_MAVEN_URL— URL del repositorio de Maven (p. ej.,https://artifactory.example.com/artifactory/maven-virtual)ARTIFACTORY_PYPI_URL— URL del repositorio de PyPI (p. ej.,https://user:token@artifactory.example.com/artifactory/api/pypi/pypi-virtual/simple)ARTIFACTORY_NPM_URL— URL del repositorio de npm (p. ej.,https://artifactory.example.com/artifactory/api/npm/npm-virtual)ARTIFACTORY_DOCKER_URL— URL del registro de Docker (p. ej.,artifactory.example.com)
- Para toda la cuenta (
initialize): Certificado y proxy - En toda la organización (
initialize): Instalación de los entornos de ejecución de los lenguajes - Para toda la organización (
maintenance): Configuración del registry con referencias literales - Comandos de sesión: Proporcionar explícitamente los secretos, cargar la configuración del entorno e iniciar sesión para operaciones concretas de Docker
Varios lenguajes con distintos repositorios
Varios lenguajes con distintos repositorios
Secretos requeridos
Secretos requeridos
NEXUS_MAVEN_URL— URL del repositorio Maven de NexusNEXUS_USER— nombre de usuario de NexusNEXUS_PASS— contraseña de NexusGITHUB_PACKAGES_TOKEN— token de acceso personal de GitHub con el ámbitoread:packagesARTIFACTORY_USER— nombre de usuario de ArtifactoryARTIFACTORY_TOKEN— token de API de Artifactory
Entorno aislado de la red con réplicas privadas
Entorno aislado de la red con réplicas privadas
Secretos requeridos
Secretos requeridos
CORP_ROOT_CA_B64— Certificado de CA corporativa codificado en Base64
APT_MIRROR_URL— URL del mirror interno de Ubuntu APTMIRROR_USER— Nombre de usuario para autenticarse en el mirrorMIRROR_PASS— Contraseña para autenticarse en el mirrorJDK_TARBALL_URL— URL para descargar el archivo tar del JDK desde el mirror internoNODE_TARBALL_URL— URL para descargar el archivo tar de Node.js desde el mirror interno
INTERNAL_MAVEN_URL— URL del registro interno de MavenINTERNAL_NPM_URL— URL del registro interno de npmINTERNAL_PYPI_URL— URL del registro interno de PyPI
VPN + certificados + proxy + lenguajes
VPN + certificados + proxy + lenguajes
Secretos requeridos
Secretos requeridos
VPN_CONFIG_B64— Archivo de configuración de OpenVPN codificado en Base64
CORP_ROOT_CA_B64— Certificado de la CA corporativa codificado en Base64CORP_HTTP_PROXY— URL del proxy HTTPCORP_HTTPS_PROXY— URL del proxy HTTPSCORP_NO_PROXY— Hosts excluidos del proxy
MAVEN_REGISTRY_URL— URL del registro de MavenNPM_REGISTRY_URL— URL del registro de npmPYPI_REGISTRY_HOST— Nombre de host del registro de PyPIREGISTRY_USER— Nombre de usuario del registro (para Maven y pip)REGISTRY_PASS— Contraseña del registro (para Maven y pip)REGISTRY_TOKEN— Token de autenticación de npm
VPN_CONFIG_B64 debe contener certificados/claves inline, usar dev tun0 y conectarse sin autenticación interactiva. Las descargas de los entornos de ejecución se realizan dentro de un mismo ciclo de vida del túnel y cargan explícitamente el entorno del proxy. Repite el bloque de configuración/limpieza de la VPN de Red y conectividad para las operaciones de la sesión; el blueprint no vuelve a conectar la VPN al inicio de la sesión.Consejos para escribir buenos blueprints
- Prueba primero los comandos en una sesión. Ejecuta los comandos manualmente en una sesión de Devin antes de agregarlos a tu blueprint. Es más rápido que esperar un ciclo completo de compilación.
- Usa
initializepara herramientas que se instalan una sola vez ymaintenancepara dependencias. Todo lo que tarde varios minutos en instalarse (compiladores, binarios grandes, herramientas globales) debe ir eninitialize. Los comandos rápidos de dependencias (npm install,uv sync) van enmaintenance. - Haz que los comandos de
maintenancesean rápidos. Procura que tarden menos de 2 minutos. Se ejecutan durante las compilaciones y se muestran al agente al inicio de la sesión. - Usa
$ENVRCpara las variables de entorno que no sean secretas. No escribas credenciales ni tokens derivados en$ENVRC,.bashrcni.profile. Carga explícitamente la configuración de shell que dependa de secretos en el comando que la necesite. - Pon nombre a tus pasos. La forma expandida con campos
namehace que los fallos en los registros de compilación sean mucho más fáciles de identificar. - Usa subshells para monorepos.
(cd packages/foo && npm install)se ejecuta en una subshell para que los pasos posteriores no se vean afectados por el cambio de directorio. - Usa
npm install, nonpm ci.npm cieliminanode_modulesy reinstala todo desde cero, lo que lo hace lento paramaintenance. - Usa secretos del repo para los valores sensibles. Configúralos en la pestaña Secrets del editor de blueprint del repositorio, en lugar de incluirlos directamente en los blueprints.

