$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
Proyecto Node.js
Proyecto Node.js
Proyecto Python
Proyecto Python
Full-stack (Node + Python)
Full-stack (Node + Python)
Plantillas de repositorios
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 en cada sesión.Go
Java
- Gradle
- Maven
Ruby on Rails
Rust
Monorepos
- Varios lenguajes
- Múltiples versiones de JDK
Registros privados de paquetes
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 ámbito read:packagesRegistros 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)
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 registro -REGISTRY_PASS— Contraseña del registro o token de API
Otros registros
proxy para módulos de Go
proxy para módulos de Go
Secretos requeridos
Secretos requeridos
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
.NET / NuGet
.NET / NuGet
Secretos requeridos
Secretos requeridos
NUGET_SOURCE_URL— URL de tu feed de NuGetNUGET_API_KEY— API key o PAT del 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 registro privado de contenedores (p. ej.,registry.corp.internal:5000)DOCKER_REGISTRY_USER— Nombre de usuario del registroDOCKER_REGISTRY_PASS— Contraseña del registro 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_REGISTRY_TOKEN— Token de autenticación para el registro privado
Ruby / Bundler
Ruby / Bundler
Secretos requeridos
Secretos requeridos
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 registroREGISTRY_PASS— Contraseña o token de API del registro
PHP / Composer
PHP / Composer
Secretos requeridos
Secretos requeridos
COMPOSER_REGISTRY_URL— URL de tu registro privado de Composer (p. ej.,https://repo.packagist.com/<org>)REGISTRY_USER— Nombre de usuario del registroREGISTRY_PASS— Contraseña del registro o token de la API
Actualización del token de AWS CodeArtifact
Actualización del token de AWS CodeArtifact
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.Secretos requeridos
Secretos requeridos
AWS_ACCESS_KEY_IDyAWS_SECRET_ACCESS_KEY— credenciales de IAM con los permisoscodeartifact:GetAuthorizationTokenysts:GetServiceBearerTokenCA_DOMAIN— nombre de tu dominio de CodeArtifactCA_DOMAIN_OWNER— ID de la cuenta de AWS propietaria del dominioCA_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
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 -w0Múltiples certificados de CA
Múltiples certificados de CA
Secretos requeridos
Secretos requeridos
CORP_ROOT_CA_B64 — certificado de CA principal codificado en Base64 - CORP_INTERMEDIATE_CA_B64 — certificado de CA intermedio codificado en Base64Proxy 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 HTTPS -CORP_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 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
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 Base64 -CORP_HTTP_PROXY,CORP_HTTPS_PROXY— URL del proxy -CORP_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
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 de GPG codificada en Base64. Genérala con:gpg --export-secret-keys <key-id> | base64 -w0GIT_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.
Identidad de Git y claves SSH
Identidad de Git y claves SSH
Secretos requeridos
Secretos requeridos
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
Configuración del sistema
Paquetes del sistema
Paquetes del sistema
Variables de entorno personalizadas
Variables de entorno personalizadas
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
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.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
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 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)
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 ArtifactoryGIT_TOKEN— token de acceso personal para módulos privados de Go
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
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
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. No escribas en.bashrcni en.profile.$ENVRCes el mecanismo compatible para establecer variables entre pasos y sesiones. - 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 plantilla del repositorio, en lugar de incluirlos directamente en las plantillas.

