exec, como env={"REGISTRY_TOKEN": "secret:repo:owner/repo:REGISTRY_TOKEN"}. Consulte Segredos. Nunca deixe credenciais fixas no código do 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 execução do comando.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 escoporead:packages
Registros 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)
source ... && em maintenance após a etapa de configuração. Codifique em percent-encoding os caracteres especiais nas credenciais da URL.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 registroREGISTRY_PASS— Senha do registro ou token de API
Outros registros
Proxy de módulos do Go
Proxy de módulos do Go
Segredos necessários
Segredos necessários
GO_PROXY_URL— URL do seu proxy de módulos Go (por exemplo,https://athens.corp.internal)
maintenance do blueprint do repositório, onde o go.mod está disponível. Não o execute na configuração de nível da organização, que é executada antes de os repositórios serem clonados..NET / NuGet
.NET / NuGet
Segredos necessários
Segredos necessários
NUGET_SOURCE_URL— URL do seu feed NuGetNuGetPackageSourceCredentials_private— Credenciais do feed no formato de ambiente do NuGet:Username=any;Password=<PAT>(use o nome de usuário exigido pelo seu feed)
Docker
Docker
Segredos necessários
Segredos necessários
DOCKER_MIRROR_URL(opcional) — URL do seu mirror do Docker Hub (ex.:https://mirror.corp.internal)DOCKER_REGISTRY_URL— URL do seu registro de contêineres privado (ex.: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_REGISTRIES_PRIVATE_TOKEN— Token de autenticação do registro chamadoprivate
cargo:token do Cargo lê o token do registro nomeado a partir do ambiente; não execute cargo login em uma etapa de build.Ruby / Bundler
Ruby / Bundler
Segredos necessários
Segredos necessários
GEM_SERVER_URL— URL do seu servidor de gems privado (ex.:https://artifactory.example.com/artifactory/api/gems/gems-virtual)BUNDLE_ARTIFACTORY__EXAMPLE__COM—username:passworddeartifactory.example.com; altere o nome da variável para corresponder ao seu servidor de gems
GEM_SERVER_URL sem credenciais. Para a variável de credencial do Bundler, adicione o prefixo BUNDLE_ ao hostname em maiúsculas, substitua cada ponto por __ e cada hífen por ___.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>)COMPOSER_AUTH— credenciais JSON do host do registro, como{"http-basic":{"repo.packagist.com":{"username":"<user>","password":"<token>"}}}
COMPOSER_REGISTRY_URL sem credenciais.Renovação do token do AWS CodeArtifact
Renovação do token do AWS CodeArtifact
source no mesmo shell command que npm, pip ou Maven para obter um token. Salvar o script em um blueprint não faz com que ele seja executado no início da sessão.awscli já vem pré-instalado na imagem base do Devin. Você só precisa cuidar da atualizaçã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— o nome do seu domínio no CodeArtifactCA_DOMAIN_OWNER— ID da AWS account 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 de cada ecossistema
source ... && apropriado como uma etapa posterior do build. O token obtido permanece no ambiente daquele shell; não o torne persistente com aws codeartifact login, com npm config set usando um token expandido ou com um pip.conf que contenha credenciais.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 -w0
openssl x509 grava apenas o certificado analisado, de modo que uma chave privada incluída acidentalmente não é copiada para o repositório de confiança. Forneça cada certificado de CA separadamente, como no próximo exemplo.Vá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 Base64CORP_INTERMEDIATE_CA_B64— certificado de CA intermediário codificado em Base64
Proxy 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 HTTPSCORP_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 proxyPROXY_PASS— Senha do proxyPROXY_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 Base64CORP_HTTP_PROXY,CORP_HTTPS_PROXY— URLs do proxyCORP_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
curl pelo trabalho que precisa do túnel. A configuração deve conter inline os certificados e as chaves necessários e usar dev tun0; não ative um serviço de VPN persistente.WG_CONFIG_B64 disponível, substituindo o comando curl pela sua operação:maintenance não as torna temporárias. Não faça snapshot de um túnel ativo nem de uma configuração de VPN privada.Resolução de DNS personalizada
Resolução de DNS personalizada
Identidade e segurança
Assinatura de commits com GPG
Assinatura de commits 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 -w0GPG_SIGNING_KEY— impressão digital completa da chave de assinaturaGIT_USER_NAME— nome do autor no Git (ex.:Devin AI)GIT_USER_EMAIL— e-mail do autor no Git. Deve corresponder a um UID da chave GPG, caso contrário o GitHub não verificará a assinatura.
Identidade Git e chaves SSH
Identidade Git e chaves SSH
Segredos necessários
Segredos necessários
GIT_USER_NAME— nome do autor no GitGIT_USER_EMAIL— e-mail do autor no GitSSH_PRIVATE_KEY_B64— chave privada SSH codificada em Base64. Gere com:cat ~/.ssh/id_ed25519 | base64 -w0SSH_KNOWN_HOSTS_B64— entradas de known hosts codificadas em Base64, verificadas com as impressões digitais das chaves de host publicadas pelo administrador do seu servidor
Configuração do sistema
Pacotes do sistema
Pacotes do sistema
Variáveis de ambiente personalizadas
Variáveis de ambiente personalizadas
$ENVRC.A abordagem recomendada é gravar linhas 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 repositório. 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
initialize de um blueprint. Isso é útil para instalar versões específicas de ferramentas usando as mesmas actions usadas pela sua CI.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. GitHub Actions baseadas em Node.js e compostas são compatíveis; ações Docker são compatíveis apenas em builds Linux. Etapas uses não podem ser executadas em maintenance. Veja limitações do GitHub Actions.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): Configuração do registro contendo referências literais - Comandos de sessão: Forneça os segredos explicitamente, carregue a configuração do ambiente e faça login para operações individuais do Docker
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 Artifactory
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
VPN_CONFIG_B64 deve conter certificados/chaves inline, usar dev tun0 e conectar sem autenticação interativa. Os downloads de runtime são executados dentro de um único ciclo de vida do túnel e carregam explicitamente o ambiente de proxy. Repita o bloco de configuração/limpeza da VPN descrito em Rede e conectividade para as operações de sessão; o blueprint não reconecta a VPN no início da sessão.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 que não sejam segredos. Não escreva credenciais nem tokens derivados em$ENVRC,.bashrcou.profile. Carregue explicitamente a configuração de shell dependente de segredos no comando que precisa dela. - 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.

