Skip to main content
Plantillas listas para copiar y pegar para lenguajes y casos de uso habituales. Cada plantilla es autosuficiente. Combínalas para crear tu configuración completa. Para ver un desglose completo de cada campo, consulta la referencia de plantillas.
Secretos: Las plantillas hacen referencia a los secretos mediante $SECRET_NAME. Configúralos en la pestaña Secrets dentro de cada editor de plantillas antes de usar una plantilla. Nunca incrustes credenciales directamente en tu plantilla.

Inicio rápido

Plantillas mínimas para las configuraciones más habituales. Copia uno, pégalo en el editor de plantillas y listo.

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

Configuración recomendada para proyectos de Python que usan uv para gestionar dependencias.

Node.js

Configuración estándar de Node.js con npm.
Usa npm install (no npm ci) en maintenance. Realiza una actualización incremental, mientras que npm ci elimina node_modules y reinstala todo desde cero en cada sesión.

Go

Configuración estándar de Go con módulos.

Java

Configuración de Java con Gradle.
JDK 17 viene preinstalado en la imagen base de Devin. Omite el paso de instalación de JDK si OpenJDK 17 predeterminado es suficiente.

Ruby on Rails

Configuración de Rails con PostgreSQL.

Rust

Configuración estándar de Rust con Cargo.
Rust (mediante rustup) y Cargo vienen preinstalados en la imagen base de Devin. Omite el paso de instalación si la cadena de herramientas estable predeterminada es suficiente. Solo necesitas descargar las dependencias.

Monorepos

Monorepo con un frontend en Node.js y un backend en Python. Cada subproyecto tiene sus propias entradas de Knowledge.
Usa subshells (cd dir && command) en lugar de cd dir && command para que el directorio de trabajo se restablezca entre pasos.

Registros privados de paquetes

Configura los gestores de paquetes para resolver dependencias desde registros privados. Configúralos en Settings > Environment > Blueprints > configuración de la organización (o por repositorio si solo un repositorio lo necesita).
La configuración de credenciales corresponde a maintenance, no a initialize. Los pasos que escriben secretos (contraseñas del registro, tokens de autenticación) en archivos de configuración deben usar maintenance para que las credenciales se vuelvan a cargar en cada sesión. Los secretos se eliminan antes de guardar la instantánea, por lo que los archivos de configuración escritos durante initialize no tendrán credenciales válidas cuando se inicien las sesiones.
Si tu registro privado usa una CA corporativa, asegúrate de que el certificado de CA esté instalado primero a nivel de Enterprise. La siguiente configuración asume que la confianza en HTTPS ya está establecida.

Registros de Node.js

Configura npm para resolver paquetes con ámbito (p. ej., @myorg/*) desde un registro privado, mientras que los paquetes públicos se siguen obteniendo del registro predeterminado de npm.
- GITHUB_PACKAGES_TOKEN — Personal Access Token o token de GitHub App con ámbito read:packages
Sustituye @myorg por tu ámbito de npm. URLs habituales de registros privados:
  • 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>

Registros de Python

Configura pip y uv para resolver paquetes desde tu registro privado de PyPI (p. ej., Nexus, Artifactory).
  • 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)
Patrones habituales de URL para registros de PyPI:
  • 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

Registro de JVM

Instala el JDK y configura Maven para redirigir toda la resolución de dependencias a través de tu registro privado (p. ej., Artifactory, Nexus).
JDK 17 está preinstalado en la imagen base de Devin. Omite el paso de instalación si el OpenJDK 17 predeterminado es suficiente. Solo necesitas instalar Maven y configurar el registro.
  • MAVEN_REGISTRY_URL — URL de tu registro de Maven (p. ej., https://artifactory.example.com/artifactory/maven-virtual) - REGISTRY_USER — Nombre de usuario del registro - REGISTRY_PASS — Contraseña del registro o token de API
Patrones comunes de URL de registros para Maven:
  • 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>

Otros registros

Instala Go y configúralo para resolver módulos mediante un proxy privado de módulos (p. ej., Athens, Artifactory o un endpoint de GOPROXY).
  • GO_PROXY_URL — URL de tu proxy de módulos de Go (p. ej., https://athens.corp.internal)
  • GIT_TOKEN — token de acceso personal para repositorios de Git privados que alojan módulos de Go
Patrones de URL habituales para proxies de Go:
  • Artifactory: https://artifactory.example.com/artifactory/go-virtual
  • Nexus: https://nexus.example.com/repository/go-proxy
  • Athens: https://athens.corp.internal
Configura NuGet para resolver paquetes desde un feed privado.
  • NUGET_SOURCE_URL — URL de tu feed de NuGet
  • NUGET_API_KEY — API key o PAT del feed
Configura Docker para descargar desde un registro privado de contenedores.
  • DOCKER_MIRROR_URL (opcional) — URL de tu mirror de Docker Hub (p. ej., https://mirror.corp.internal)
  • DOCKER_REGISTRY_URL — URL de tu registro privado de contenedores (p. ej., registry.corp.internal:5000)
  • DOCKER_REGISTRY_USER — Nombre de usuario del registro
  • DOCKER_REGISTRY_PASS — Contraseña del registro o token de API
URLs habituales de registros de contenedores:
  • 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
Configura Cargo para resolver crates desde un registro privado.
Rust (a través de rustup) y Cargo vienen preinstalados en la imagen base de Devin. Omite el paso de instalación si el toolchain estable predeterminado es suficiente. Solo necesitas configurar el registro.
  • CARGO_REGISTRY_INDEX — URL del índice del registro privado (p. ej., sparse+https://cargo.corp.internal/api/v1/crates/)
  • CARGO_REGISTRY_TOKEN — Token de autenticación para el registro privado
Si solo necesitas agregar un registro privado sin sustituir crates.io, elimina las secciones [source.crates-io] y [source.private] y usa cargo install --registry private o [dependencies] my-crate = { version = "1.0", registry = "private" } en Cargo.toml.
Instala Ruby y configura Bundler para resolver las gemas desde un servidor privado de gemas.
  • GEM_SERVER_URL — URL de tu servidor privado de gemas (p. ej., https://artifactory.example.com/artifactory/api/gems/gems-virtual)
  • REGISTRY_USER — Nombre de usuario del registro
  • REGISTRY_PASS — Contraseña o token de API del registro
Patrones de URL habituales para servidores de gemas:
  • Artifactory: https://artifactory.example.com/artifactory/api/gems/gems-virtual
  • Nexus: https://nexus.example.com/repository/rubygems-proxy
  • Gemfury: https://gem.fury.io/<org>
Instala PHP y configura Composer para resolver paquetes desde un registro privado de Packagist o Satis.
  • COMPOSER_REGISTRY_URL — URL de tu registro privado de Composer (p. ej., https://repo.packagist.com/<org>)
  • REGISTRY_USER — Nombre de usuario del registro
  • REGISTRY_PASS — Contraseña del registro o token de la API
Patrones de URL comunes para registros de Composer:
  • 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
Los tokens de AWS CodeArtifact caducan al cabo de 12 horas. Usa maintenance para configurar el comando de renovación del token, de modo que el agente pueda volver a ejecutarlo cuando sea necesario. Este ejemplo configura npm, pip y Maven para usar CodeArtifact.
awscli viene preinstalado en la imagen base de Devin. Solo necesitas renovar el token y configurar el registro.
  • AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY — credenciales de IAM con los permisos codeartifact:GetAuthorizationToken y sts:GetServiceBearerToken
  • CA_DOMAIN — nombre de tu dominio de CodeArtifact
  • CA_DOMAIN_OWNER — ID de la cuenta de AWS propietaria del dominio
  • CA_REGION — región de AWS (p. ej., us-east-1)
  • CA_NPM_REPO, CA_PYPI_REPO, CA_MAVEN_REPO — nombres de los repositorios de cada ecosistema

Infraestructura de Enterprise

Infraestructura a nivel de máquina que se aplica a todas las organizaciones y repositorios. Configúrala en Settings > entorno base de Devin (a nivel Enterprise) o Settings > Environment > Blueprints > configuración de la organización (a nivel de organización).

Red y conectividad

Tu organización usa una autoridad certificadora privada para los servicios internos. Devin necesita el certificado raíz para conectarse a los repositorios y herramientas internos mediante HTTPS.
- CORP_ROOT_CA_B64 — Certificado PEM codificado en Base64 de tu CA corporativa. Genéralo con: cat corp-root-ca.crt | base64 -w0
Si tu organización usa múltiples certificados de CA (p. ej., CAs separadas para distintos servicios internos).
- CORP_ROOT_CA_B64 — certificado de CA principal codificado en Base64 - CORP_INTERMEDIATE_CA_B64 — certificado de CA intermedio codificado en Base64
Dirige todo el tráfico de red a través de un proxy corporativo.
  • CORP_HTTP_PROXY — URL del proxy HTTP (p. ej., http://proxy.corp.example.com:8080) - CORP_HTTPS_PROXY — URL del proxy HTTPS - CORP_NO_PROXY — Lista de hosts separados por comas para omitir el proxy (p. ej., localhost,127.0.0.1,.corp.example.com)
Si tu proxy corporativo requiere autenticación con nombre de usuario y contraseña.
  • PROXY_USER — Nombre de usuario del proxy - PROXY_PASS — Contraseña del proxy - PROXY_HOST — Host y puerto del proxy (p. ej., proxy.corp.example.com:8080) - CORP_NO_PROXY — Hosts que deben omitir el proxy
Configuración combinada para entornos que necesitan tanto una CA corporativa como un proxy. Esto es habitual en entornos empresariales donde los servicios internos usan certificados privados y todo el tráfico debe pasar por un proxy.
  • CORP_ROOT_CA_B64 — Certificado de CA corporativa codificado en Base64 - CORP_HTTP_PROXY, CORP_HTTPS_PROXY — URL del proxy - CORP_NO_PROXY — Hosts que deben omitir el proxy
Solo se puede acceder a tus registros privados, servidores Git u otros servicios internos a través de una VPN. Debe ejecutarse antes que otros módulos que necesiten acceso de red a recursos internos.
OpenVPN:
  • VPN_CONFIG_B64 — Archivo de configuración de OpenVPN codificado en Base64 (.ovpn). Genéralo con: cat corp.ovpn | base64 -w0
  • VPN_AUTH_USER (opcional) — Nombre de usuario de la VPN, si tu VPN requiere autenticación con nombre de usuario y contraseña
  • VPN_AUTH_PASS (opcional) — Contraseña de la VPN
WireGuard:
  • WG_CONFIG_B64 — Archivo de configuración de WireGuard codificado en Base64. Genéralo con: cat wg0.conf | base64 -w0
OpenVPN:
WireGuard:
Para más información sobre la configuración de la VPN, consulta VPN Configuration.
Tus servicios internos usan nombres DNS privados que no se pueden resolver mediante DNS público.

Identidad y seguridad

Tu organización requiere que todos los commits de Git estén firmados y quieres que GitHub marque los commits de Devin como Verified.
  • GPG_PRIVATE_KEY_B64 — Clave privada de GPG codificada en Base64. Genérala con: gpg --export-secret-keys <key-id> | base64 -w0
  • GIT_USER_NAME — Nombre del autor de Git (p. ej., Devin AI)
  • GIT_USER_EMAIL — Correo electrónico del autor de Git. Debe coincidir con un UID de la clave GPG; de lo contrario, GitHub no verificará la firma.
Sube también la clave pública correspondiente a la cuenta de GitHub cuyas credenciales usa Devin para hacer push (en GitHub Settings > SSH and GPG keys). GitHub solo marca los commits como Verified cuando la clave pública de firma está registrada en la cuenta que creó el commit.
Configura la identidad de Git y las claves SSH de Devin para acceder a servidores Git privados.
  • GIT_USER_NAME — Nombre del autor de Git - GIT_USER_EMAIL — Correo electrónico del autor de Git - SSH_PRIVATE_KEY_B64 — Clave privada SSH codificada en Base64. Genérala con: cat ~/.ssh/id_ed25519 | base64 -w0 - SSH_KNOWN_HOSTS_B64 — Entradas de hosts conocidos codificadas en Base64. Genéralas con: ssh-keyscan git.corp.internal | base64 -w0 - SSH_CONFIG_B64 (opcional) — Archivo de configuración SSH codificado en Base64
Genera la entrada de hosts conocidos para tu servidor Git con ssh-keyscan git.corp.internal | base64 -w0.

Configuración del sistema

Instale paquetes del sistema que no estén en la imagen predeterminada de Devin (p. ej., bibliotecas nativas para el procesamiento de imágenes o la generación de PDF).
Establece variables de entorno persistentes que deben estar disponibles en cada sesión.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).
También puedes escribir variables de entorno en scripts de /etc/profile.d/ para que estén disponibles en todo el sistema:
Ambos métodos funcionan. $ENVRC es más sencillo y se recomienda en la mayoría de los casos.
Las imágenes base predeterminadas pueden tener la configuración regional mal configurada. Configure la configuración regional y la zona horaria para evitar advertencias de las herramientas de compilación, Java, Python y Git.
Las compilaciones de Java, Gradle y Node.js suelen alcanzar el límite predeterminado de 1024 archivos abiertos. Auméntelo para evitar fallos de compilación.
En entornos aislados o restringidos, sustituye los repositorios APT predeterminados de Ubuntu por un mirror interno.
- APT_MIRROR_URL — URL de tu mirror interno de APT (p. ej., https://artifactory.example.com/artifactory/ubuntu-remote)
Patrones comunes de URL para mirrors de APT:
  • Artifactory: https://artifactory.example.com/artifactory/ubuntu-remote
  • Nexus: https://nexus.example.com/repository/ubuntu-proxy

Patrones avanzados

El Environment base de Devin incluye direnv. Usa initialize para crear archivos .envrc. Direnv los carga automáticamente.
direnv ya viene integrado en el shell de Devin, por lo que las variables de .envrc se cargan automáticamente. No necesitas hacer source manualmente.
Para las variables de entorno sensibles (API keys, tokens, contraseñas de bases de datos), usa secretos del repositorio en lugar de archivos .envrc. Los secretos del repositorio se almacenan de forma segura y se inyectan durante la sesión. Nunca aparecen en tu blueprint ni en tu instantánea.
Usa nvm (preinstalado) para cambiar la versión de Node.js de cada repositorio mediante .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).
Devin proporciona un navegador Chrome con un endpoint de CDP en localhost:29229 durante las sesiones. Usa scripts de Playwright para automatizar el inicio de sesión en el navegador.
El navegador solo está disponible durante las sesiones, no en las compilaciones de instantánea. Instala Playwright en initialize y mantén los scripts de inicio de sesión en tu repositorio.
Script de ejemplo para iniciar sesión (scripts/login.py):
Guarda las credenciales de inicio de sesión como secretos, no en el código fuente. Para mantener la autenticación a largo plazo, confirma los scripts de inicio de sesión en .agents/skills/ para que Devin pueda autenticarse de nuevo automáticamente.
Instala paquetes del sistema, binarios personalizados y configura la variable PATH en initialize.
Devin permite ejecutar GitHub Actions basadas en Node.js directamente en blueprints. Esto es útil para instalar versiones específicas de herramientas mediante las mismas acciones que usa tu CI.
Acciones como 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. Solo se admiten las GitHub Actions basadas en Node.js. Las acciones compuestas y basadas en Docker no son compatibles.
No necesitas GitHub Actions para la configuración básica de herramientas. Los comandos directos de shell (nvm install 20, curl ... | sh, apt-get install) funcionan igual de bien y suelen ser más sencillos. Las GitHub Actions resultan más útiles cuando quieres reproducir exactamente tu configuración de CI o necesitas la comodidad de acciones como setup-java, que gestionan múltiples distribuciones.
Ejecuta varios servicios detrás de hostnames de apariencia real mediante HTTPS, como 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.
Caddyfile
El mapeo de /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.
Para agregar un servicio, añade un bloque de tres líneas al Caddyfile y una entrada al mapeo de /etc/hosts, y luego visita su hostname por HTTPS. Caddy emite un certificado en la primera solicitud, así que no hace falta generar certificados por aplicación.

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.
Un Environment empresarial completo: certificado CA corporativo, proxy, Java (Maven), Python (pip/uv), Node.js (npm) y Docker, todos apuntando a una única instancia de Artifactory.
Red y confianza (para toda la cuenta):
  • CORP_ROOT_CA_B64 — certificado de la CA corporativa codificado en Base64
  • CORP_HTTP_PROXY — URL del proxy HTTP
  • CORP_HTTPS_PROXY — URL del proxy HTTPS
  • CORP_NO_PROXY — hosts que deben omitir el proxy
Credenciales del registro (para toda la organización):
  • ARTIFACTORY_USER — nombre de usuario de Artifactory
  • ARTIFACTORY_TOKEN — token de API o contraseña de Artifactory
  • ARTIFACTORY_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)
Esto normalmente se dividiría en tres ámbitos:
  • Para toda la cuenta (initialize): Certificado y proxy
  • En toda la organización (initialize): Instalación del entorno de ejecución del lenguaje
  • Para toda la organización (maintenance): Credenciales del registro (se actualizan durante las compilaciones y se ponen a disposición del agente al inicio de la sesión)
Se muestra aquí de forma combinada como referencia:
En este ejemplo, todos los registries apuntan a la misma instancia de Artifactory, pero usan rutas de URL diferentes. Cada ecosistema de paquetes tiene su propio formato de endpoint. Las URL de Maven, PyPI, npm y Docker son diferentes incluso para el mismo registry.
Cuando distintos lenguajes usan diferentes repositorios privados (p. ej., Maven desde Nexus, npm desde GitHub Packages, Python desde Artifactory).
  • NEXUS_MAVEN_URL — URL del repositorio Maven de Nexus
  • NEXUS_USER — nombre de usuario de Nexus
  • NEXUS_PASS — contraseña de Nexus
  • GITHUB_PACKAGES_TOKEN — token de acceso personal de GitHub con el ámbito read:packages
  • ARTIFACTORY_USER — nombre de usuario de Artifactory
  • ARTIFACTORY_TOKEN — token de API de Artifactory
  • GIT_TOKEN — token de acceso personal para módulos privados de Go
En un entorno completamente aislado de la red, Devin no puede acceder a ninguna URL pública. Todas las herramientas, los entornos de ejecución y los paquetes deben provenir de mirrors internos.
Certificados:
  • CORP_ROOT_CA_B64 — Certificado de CA corporativa codificado en Base64
Acceso al mirror:
  • APT_MIRROR_URL — URL del mirror interno de Ubuntu APT
  • MIRROR_USER — Nombre de usuario para autenticarse en el mirror
  • MIRROR_PASS — Contraseña para autenticarse en el mirror
  • JDK_TARBALL_URL — URL para descargar el archivo tar del JDK desde el mirror interno
  • NODE_TARBALL_URL — URL para descargar el archivo tar de Node.js desde el mirror interno
Registros de paquetes:
  • INTERNAL_MAVEN_URL — URL del registro interno de Maven
  • INTERNAL_NPM_URL — URL del registro interno de npm
  • INTERNAL_PYPI_URL — URL del registro interno de PyPI
En entornos aislados de la red, todas las herramientas que Devin necesita (entornos de ejecución, herramientas de CLI, etc.) deben estar disponibles en tus repositorios espejo internos. No se puede acceder a los repositorios públicos ni a los sitios de descarga.
Una configuración empresarial completa que combina conectividad VPN con certificados, proxy y compatibilidad con varios idiomas. Este es el orden de operaciones recomendado.
VPN:
  • VPN_CONFIG_B64 — Archivo de configuración de OpenVPN codificado en Base64
Red y confianza:
  • CORP_ROOT_CA_B64 — Certificado de la CA corporativa codificado en Base64
  • CORP_HTTP_PROXY — URL del proxy HTTP
  • CORP_HTTPS_PROXY — URL del proxy HTTPS
  • CORP_NO_PROXY — Hosts excluidos del proxy
Credenciales del registro:
  • MAVEN_REGISTRY_URL — URL del registro de Maven
  • NPM_REGISTRY_URL — URL del registro de npm
  • PYPI_REGISTRY_HOST — Nombre de host del registro de PyPI
  • REGISTRY_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
El orden de los pasos de initialize es importante. La VPN debe ir primero (para que los hosts internos sean accesibles), luego el DNS (para que los nombres se resuelvan), después los certificados (para que HTTPS funcione), luego el proxy (para que el tráfico se enrute correctamente) y, por último, los entornos de ejecución, que pueden descargarse desde mirrors internos).

Consejos para escribir buenas plantillas

  • Prueba primero los comandos en una sesión. Ejecuta los comandos manualmente en una sesión de Devin antes de agregarlos a tu plantilla. Es más rápido que esperar un ciclo completo de compilación.
  • Usa initialize para herramientas que se instalan una sola vez y maintenance para dependencias. Todo lo que tarde varios minutos en instalarse (compiladores, binarios grandes, herramientas globales) debe ir en initialize. Los comandos rápidos de dependencias (npm install, uv sync) van en maintenance.
  • Haz que los comandos de maintenance sean 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 $ENVRC para las variables de entorno. No escribas en .bashrc ni en .profile. $ENVRC es el mecanismo compatible para establecer variables entre pasos y sesiones.
  • Pon nombre a tus pasos. La forma expandida con campos name hace 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, no npm ci. npm ci elimina node_modules y reinstala todo desde cero, lo que lo hace lento para maintenance.
  • Usa secretos del repo para los valores sensibles. Configúralos en la pestaña Secrets del editor de plantilla del repositorio, en lugar de incluirlos directamente en las plantillas.
Para conocer los detalles de la sintaxis, consulta la referencia de plantilla. Para solucionar fallos de compilación, consulta Configuración declarativa > Solución de problemas.