$SECRET_NAME. Configure-os na aba Secrets no editor de cada blueprint antes de usar um template. Nunca inclua credenciais diretamente no seu blueprint.Início rápido
Projeto em Node.js
Projeto em Node.js
Projeto em Python
Projeto em Python
Full-stack (Node + Python)
Full-stack (Node + Python)
Blueprints de repositório
Python
- uv (recomendado)
- pip + venv
Node.js
- npm
- pnpm
npm install (não npm ci) em maintenance. Ele faz uma atualização incremental, enquanto npm ci exclui node_modules e reinstala tudo do zero a cada sessão.Go
Java
- Gradle
- Maven
Ruby on Rails
Rust
Monorepos
- Multilíngue
- Múltiplas versões do JDK
Registros privados de pacotes
Registros do Node.js
- npm (com escopo)
- npm (espelhamento completo)
- pnpm
- Yarn
@myorg/*) a partir de um registro privado, enquanto os pacotes públicos continuam vindo do registro padrão do npm.Segredos necessários
Segredos necessários
GITHUB_PACKAGES_TOKEN — Token de acesso pessoal ou token do GitHub App com o escopo read:packagesRegistros do Python
- pip / uv
- Poetry
Segredos necessários
Segredos necessários
PYPI_REGISTRY_URL— URL completa do seu índice PyPI, incluindo credenciais, se necessário (por exemplo,https://user:token@nexus.example.com/repository/pypi-proxy/simple)
Registros da JVM
- Maven
- Gradle
Segredos necessários
Segredos necessários
MAVEN_REGISTRY_URL— URL do seu registro Maven (por exemplo,https://artifactory.example.com/artifactory/maven-virtual) -REGISTRY_USER— Nome de usuário do registro -REGISTRY_PASS— Senha do registro ou token de API
Outros registros
Proxy de módulos do Go
Proxy de módulos do Go
GOPROXY).Segredos necessários
Segredos necessários
GO_PROXY_URL— URL do seu proxy de módulos Go (por exemplo,https://athens.corp.internal)GIT_TOKEN— Token de acesso pessoal para repositórios Git privados que hospedam módulos Go
.NET / NuGet
.NET / NuGet
Segredos obrigatórios
Segredos obrigatórios
NUGET_SOURCE_URL— URL do seu feed do NuGetNUGET_API_KEY— Chave de API ou PAT para o feed
Docker
Docker
Segredos necessários
Segredos necessários
DOCKER_MIRROR_URL(opcional) — URL do seu espelho do Docker Hub (por exemplo,https://mirror.corp.internal)DOCKER_REGISTRY_URL— URL do seu registro privado de contêineres (por exemplo,registry.corp.internal:5000)DOCKER_REGISTRY_USER— Nome de usuário do registroDOCKER_REGISTRY_PASS— Senha do registro ou token de API
Rust / Cargo
Rust / Cargo
Segredos necessários
Segredos necessários
CARGO_REGISTRY_INDEX— URL do índice do registro privado (por exemplo,sparse+https://cargo.corp.internal/api/v1/crates/)CARGO_REGISTRY_TOKEN— token de autenticação para o registro privado
Ruby / Bundler
Ruby / Bundler
Segredos necessários
Segredos necessários
GEM_SERVER_URL— URL do seu servidor privado de gems (por exemplo,https://artifactory.example.com/artifactory/api/gems/gems-virtual)REGISTRY_USER— nome de usuário do registroREGISTRY_PASS— senha do registro ou token de API
PHP / Composer
PHP / Composer
Segredos necessários
Segredos necessários
COMPOSER_REGISTRY_URL— URL do seu registro privado do Composer (por exemplo,https://repo.packagist.com/<org>)REGISTRY_USER— Nome de usuário do registroREGISTRY_PASS— Senha do registro ou token de API
Renovação do token do AWS CodeArtifact
Renovação do token do AWS CodeArtifact
maintenance para configurar o comando de renovação do token para que o agente possa reexecutá-lo quando necessário. Este exemplo configura npm, pip e Maven para usar o CodeArtifact.awscli vem pré-instalado na imagem base do Devin. Você só precisa da renovação do token e da configuração do registro.Segredos necessários
Segredos necessários
AWS_ACCESS_KEY_IDeAWS_SECRET_ACCESS_KEY— credenciais do IAM com as permissõescodeartifact:GetAuthorizationTokenests:GetServiceBearerTokenCA_DOMAIN— Nome do seu domínio do CodeArtifactCA_DOMAIN_OWNER— ID da conta AWS proprietária do domínioCA_REGION— Região da AWS (por exemplo,us-east-1)CA_NPM_REPO,CA_PYPI_REPO,CA_MAVEN_REPO— Nomes dos repositórios para cada ecossistema
Infraestrutura do Enterprise
Rede e conectividade
Certificado de CA corporativa
Certificado de CA corporativa
Segredos necessários
Segredos necessários
CORP_ROOT_CA_B64 — certificado PEM codificado em Base64 da sua CA corporativa. Gere com: cat corp-root-ca.crt | base64 -w0Vários certificados de CA
Vários certificados de CA
Segredos necessários
Segredos necessários
CORP_ROOT_CA_B64 — certificado de CA principal codificado em Base64 - CORP_INTERMEDIATE_CA_B64 — certificado de CA intermediário codificado em Base64Proxy HTTP/HTTPS
Proxy HTTP/HTTPS
Segredos necessários
Segredos necessários
CORP_HTTP_PROXY— URL do proxy HTTP (por exemplo,http://proxy.corp.example.com:8080) -CORP_HTTPS_PROXY— URL do proxy HTTPS -CORP_NO_PROXY— Lista de hosts separados por vírgula que devem ignorar o proxy (por exemplo,localhost,127.0.0.1,.corp.example.com)
Proxy autenticado
Proxy autenticado
Segredos necessários
Segredos necessários
PROXY_USER— Nome de usuário do proxy -PROXY_PASS— Senha do proxy -PROXY_HOST— Host e porta do proxy (por exemplo,proxy.corp.example.com:8080) -CORP_NO_PROXY— Hosts que devem ignorar o proxy
certificado de CA + proxy (combinado)
certificado de CA + proxy (combinado)
Segredos necessários
Segredos necessários
CORP_ROOT_CA_B64— certificado de CA corporativa codificado em Base64 -CORP_HTTP_PROXY,CORP_HTTPS_PROXY— URLs do proxy -CORP_NO_PROXY— Hosts que ignoram o proxy
Conexão VPN
Conexão VPN
Segredos necessários
Segredos necessários
VPN_CONFIG_B64— Arquivo de configuração do OpenVPN (.ovpn) codificado em Base64. Gere com:cat corp.ovpn | base64 -w0VPN_AUTH_USER(opcional) — Nome de usuário da VPN, caso sua VPN exija autenticação com nome de usuário e senhaVPN_AUTH_PASS(opcional) — Senha da VPN
WG_CONFIG_B64— Arquivo de configuração do WireGuard codificado em Base64. Gere com:cat wg0.conf | base64 -w0
Resolução de DNS personalizada
Resolução de DNS personalizada
Identidade e segurança
Assinatura de commit com GPG
Assinatura de commit com GPG
Segredos necessários
Segredos necessários
GPG_PRIVATE_KEY_B64— Chave privada GPG codificada em Base64. Gere com:gpg --export-secret-keys <key-id> | base64 -w0GIT_USER_NAME— Nome do autor no Git (por exemplo,Devin AI)GIT_USER_EMAIL— Email do autor no Git. Deve corresponder a um UID da chave GPG; caso contrário, o GitHub não verificará a assinatura.
Identidade do Git e chaves SSH
Identidade do Git e chaves SSH
Segredos necessários
Segredos necessários
GIT_USER_NAME— Nome do autor no Git -GIT_USER_EMAIL— Email do autor no Git -SSH_PRIVATE_KEY_B64— Chave privada SSH codificada em Base64. Gere com:cat ~/.ssh/id_ed25519 | base64 -w0-SSH_KNOWN_HOSTS_B64— Entradas de hosts conhecidos codificadas em Base64. Gere com:ssh-keyscan git.corp.internal | base64 -w0-SSH_CONFIG_B64(opcional) — Arquivo de configuração SSH codificado em Base64
Configuração do sistema
Pacotes do sistema
Pacotes do sistema
Variáveis de ambiente personalizadas
Variáveis de ambiente personalizadas
KEY=VALUE no arquivo $ENVRC. As variáveis gravadas em $ENVRC são exportadas automaticamente para todas as etapas seguintes e para a sessão do Devin (semelhante ao $GITHUB_ENV do GitHub Actions).Localidade e fuso horário
Localidade e fuso horário
Limites de recursos (ulimits)
Limites de recursos (ulimits)
Substituição do mirror do APT
Substituição do mirror do APT
Segredos necessários
Segredos necessários
APT_MIRROR_URL — URL do seu espelho APT interno (por exemplo, https://artifactory.example.com/artifactory/ubuntu-remote)Padrões avançados
Variáveis de ambiente com direnv
Variáveis de ambiente com direnv
initialize para criar arquivos .envrc. O direnv os carrega automaticamente..envrc são carregadas automaticamente. Não é preciso executar source manualmente.Troca de versão do Node por repositório
Troca de versão do Node por repositório
.nvmrc.nvm use lê o .nvmrc na raiz do repo. Certifique-se de que seu repositório tenha esse arquivo (por exemplo, com 20).Ferramentas personalizadas do sistema e PATH
Ferramentas personalizadas do sistema e PATH
initialize.GitHub Actions para configurar ferramentas
GitHub Actions para configurar ferramentas
setup-node e setup-python alteram o PATH e as variáveis de ambiente. Os binários instalados por uma ação ficam disponíveis em todas as etapas seguintes e em maintenance. Apenas
GitHub Actions baseadas em Node.js são compatíveis. Ações compostas e baseadas em Docker não são.Proxy reverso HTTPS local para vários apps
Proxy reverso HTTPS local para vários apps
app.example.com, api.example.com e admin.example.com. Instale um único proxy reverso em initialize e roteie cada nome de host para uma porta upstream local diferente.Caddy gerencia o roteamento e o TLS local em uma única ferramenta. Um Caddyfile mapeia cada nome de host para um upstream, e tls internal emite automaticamente um certificado confiável por nome de host a partir da CA integrada do Caddy. caddy trust instala essa raiz da CA no repositório de confiança do sistema, e adicionar a mesma raiz ao banco de dados NSS permite que o navegador a aceite.Importe seu Caddyfile pela seção File attachments do editor de blueprint; ele então fica disponível como $FILE_CADDYFILE./etc/hosts é o que faz app.example.com resolver para 127.0.0.1 dentro da sessão. Adicione uma entrada para cada hostname que você colocar no Caddyfile.Exemplos full-stack
Stack Enterprise completo (Artifactory)
Stack Enterprise completo (Artifactory)
Segredos necessários
Segredos necessários
CORP_ROOT_CA_B64— certificado de CA corporativa codificado em Base64CORP_HTTP_PROXY— URL do proxy HTTPCORP_HTTPS_PROXY— URL do proxy HTTPSCORP_NO_PROXY— hosts que devem ignorar o proxy
ARTIFACTORY_USER— nome de usuário do ArtifactoryARTIFACTORY_TOKEN— token de API ou senha do ArtifactoryARTIFACTORY_MAVEN_URL— URL do repositório Maven (por exemplo,https://artifactory.example.com/artifactory/maven-virtual)ARTIFACTORY_PYPI_URL— URL do repositório PyPI (por exemplo,https://user:token@artifactory.example.com/artifactory/api/pypi/pypi-virtual/simple)ARTIFACTORY_NPM_URL— URL do repositório npm (por exemplo,https://artifactory.example.com/artifactory/api/npm/npm-virtual)ARTIFACTORY_DOCKER_URL— URL do registro do Docker (por exemplo,artifactory.example.com)
- Nível da conta (
initialize): Certificado e proxy - Nível da organização (
initialize): Instalação de runtimes de linguagem - Nível da organização (
maintenance): Credenciais do registro (atualizadas durante os builds, disponibilizadas ao agente no início da sessão)
Multilíngue com diferentes registros
Multilíngue com diferentes registros
Segredos necessários
Segredos necessários
NEXUS_MAVEN_URL— URL do repositório Maven no NexusNEXUS_USER— nome de usuário do NexusNEXUS_PASS— senha do NexusGITHUB_PACKAGES_TOKEN— token de acesso pessoal do GitHub com escoporead:packagesARTIFACTORY_USER— nome de usuário do ArtifactoryARTIFACTORY_TOKEN— token de API do ArtifactoryGIT_TOKEN— token de acesso pessoal para módulos privados do Go
Ambiente isolado da rede com repositórios espelho privados
Ambiente isolado da rede com repositórios espelho privados
Segredos necessários
Segredos necessários
CORP_ROOT_CA_B64— certificado de CA corporativa codificado em Base64
APT_MIRROR_URL— URL do mirror APT interno do UbuntuMIRROR_USER— nome de usuário para autenticação no mirrorMIRROR_PASS— senha para autenticação no mirrorJDK_TARBALL_URL— URL para baixar o tarball do JDK do mirror internoNODE_TARBALL_URL— URL para baixar o tarball do Node.js do mirror interno
INTERNAL_MAVEN_URL— URL do registro Maven internoINTERNAL_NPM_URL— URL do registro npm internoINTERNAL_PYPI_URL— URL do registro PyPI interno
VPN + certificados + proxy + linguagens
VPN + certificados + proxy + linguagens
Segredos necessários
Segredos necessários
VPN_CONFIG_B64— arquivo de configuração do OpenVPN codificado em Base64
CORP_ROOT_CA_B64— certificado de CA corporativa codificado em Base64CORP_HTTP_PROXY— URL do proxy HTTPCORP_HTTPS_PROXY— URL do proxy HTTPSCORP_NO_PROXY— hosts que devem ignorar o proxy
MAVEN_REGISTRY_URL— URL do registro do MavenNPM_REGISTRY_URL— URL do registro do npmPYPI_REGISTRY_HOST— hostname do registro do PyPIREGISTRY_USER— nome de usuário do registro (para Maven e pip)REGISTRY_PASS— senha do registro (para Maven e pip)REGISTRY_TOKEN— token de autenticação do npm
initialize importa. A VPN deve vir primeiro (para que os hosts internos fiquem acessíveis), depois o DNS (para que os nomes sejam resolvidos), depois os certificados (para que o HTTPS funcione), depois o proxy (para que o tráfego seja roteado corretamente) e, por fim, os runtimes de linguagem (que podem fazer download de mirrors internos).Dicas para escrever bons blueprints
- Teste os comandos primeiro em uma sessão. Execute os comandos manualmente em uma sessão do Devin antes de adicioná-los ao blueprint. Isso é mais rápido do que esperar um ciclo completo de build.
- Use
initializepara ferramentas instaladas uma única vez emaintenancepara dependências. Tudo o que leva minutos para instalar (compiladores, binários grandes, ferramentas globais) deve ficar eminitialize. Comandos rápidos de dependência (npm install,uv sync) entram emmaintenance. - Mantenha os comandos de
maintenancerápidos. Procure ficar abaixo de 2 minutos. Eles são executados durante os builds e apresentados ao agente no início da sessão. - Use
$ENVRCpara variáveis de ambiente. Não escreva em.bashrcnem em.profile.$ENVRCé o mecanismo suportado para definir variáveis entre etapas e sessões. - Dê nomes às suas etapas. A forma expandida com campos
namefacilita muito identificar falhas nos logs de build. - Use subshells para monorepos.
(cd packages/foo && npm install)é executado em um subshell, então as etapas seguintes não são afetadas pela mudança de diretório. - Use
npm install, nãonpm ci.npm ciapaganode_modulese reinstala tudo do zero em cada sessão, o que é lento paramaintenance. - Use secrets do repositório para valores sensíveis. Configure-os na aba Secrets do editor de blueprint do repositório, em vez de embuti-los nos blueprints.

