$SECRET_NAME. Configurez-les dans l’onglet Secrets de chaque éditeur de blueprint avant d’utiliser un modèle. N’intégrez jamais d’identifiants en dur dans votre blueprint.Démarrage rapide
Projet Node.js
Projet Node.js
Projet Python
Projet Python
Projet full-stack (Node + Python)
Projet full-stack (Node + Python)
Blueprints du dépôt
Python
- uv (recommandé)
- pip + venv
Node.js
- npm
- pnpm
npm install (et non npm ci) dans maintenance. Cette commande effectue une mise à jour incrémentielle, tandis que npm ci supprime node_modules et réinstalle tout depuis zéro à chaque session.Go
Java
- Gradle
- Maven
Ruby on Rails
Rust
Monorepos
- Multilingue
- Versions multiples de JDK
Registres privés de packages
Registres Node.js
- npm (scoped)
- npm (miroir complet)
- pnpm
- Yarn
@myorg/*) à partir d’un registre privé, tandis que les packages publics continuent de provenir du registre npm par défaut.Secrets requis
Secrets requis
GITHUB_PACKAGES_TOKEN — Jeton d’accès personnel ou jeton GitHub App avec le périmètre read:packagesRegistres Python
- pip / uv
- Poetry
Secrets requis
Secrets requis
PYPI_REGISTRY_URL— URL complète de votre index PyPI, y compris les identifiants si nécessaire (p. ex.,https://user:token@nexus.example.com/repository/pypi-proxy/simple)
Registres JVM
- Maven
- Gradle
Secrets requis
Secrets requis
MAVEN_REGISTRY_URL— URL de votre registre Maven (p. ex.https://artifactory.example.com/artifactory/maven-virtual) -REGISTRY_USER— Nom d’utilisateur du registre -REGISTRY_PASS— Mot de passe du registre ou jeton d’API
Autres registres
Proxy de modules Go
Proxy de modules Go
Secrets requis
Secrets requis
GO_PROXY_URL— URL de votre proxy de modules Go (par ex.,https://athens.corp.internal)GIT_TOKEN— jeton d’accès personnel pour les dépôts Git privés qui hébergent des modules Go
.NET / NuGet
.NET / NuGet
Secrets requis
Secrets requis
NUGET_SOURCE_URL— URL de votre source NuGetNUGET_API_KEY— clé API ou PAT pour la source
Docker
Docker
Secrets requis
Secrets requis
DOCKER_MIRROR_URL(facultatif) — URL de votre miroir Docker Hub (par exemple,https://mirror.corp.internal)DOCKER_REGISTRY_URL— URL de votre registre de conteneurs privé (par exemple,registry.corp.internal:5000)DOCKER_REGISTRY_USER— Nom d’utilisateur du registreDOCKER_REGISTRY_PASS— Mot de passe du registre ou jeton d’API
Rust / Cargo
Rust / Cargo
Secrets requis
Secrets requis
CARGO_REGISTRY_INDEX— URL de l’index du registre privé (p. ex.,sparse+https://cargo.corp.internal/api/v1/crates/)CARGO_REGISTRY_TOKEN— jeton d’authentification pour le registre privé
Ruby / Bundler
Ruby / Bundler
Secrets requis
Secrets requis
GEM_SERVER_URL— URL de votre serveur de gems privé (p. ex.,https://artifactory.example.com/artifactory/api/gems/gems-virtual)REGISTRY_USER— Nom d’utilisateur du registreREGISTRY_PASS— Mot de passe du registre ou jeton d’API
PHP / Composer
PHP / Composer
Secrets requis
Secrets requis
COMPOSER_REGISTRY_URL— URL de votre registre Composer privé (par ex.,https://repo.packagist.com/<org>)REGISTRY_USER— Nom d’utilisateur du registreREGISTRY_PASS— Mot de passe du registre ou jeton d’API
Renouvellement du jeton AWS CodeArtifact
Renouvellement du jeton AWS CodeArtifact
maintenance pour configurer la commande de renouvellement du jeton afin que l’agent puisse l’exécuter à nouveau si nécessaire. Cet exemple configure npm, pip et Maven pour utiliser CodeArtifact.awscli est préinstallé sur l’image de base de Devin. Il vous suffit d’actualiser le jeton et de configurer le registre.Secrets requis
Secrets requis
AWS_ACCESS_KEY_IDetAWS_SECRET_ACCESS_KEY— Identifiants IAM avec les autorisationscodeartifact:GetAuthorizationTokenetsts:GetServiceBearerTokenCA_DOMAIN— Nom de votre domaine CodeArtifactCA_DOMAIN_OWNER— ID du compte AWS propriétaire du domaineCA_REGION— Région AWS (p. ex.,us-east-1)CA_NPM_REPO,CA_PYPI_REPO,CA_MAVEN_REPO— Noms des dépôts pour chaque écosystème
Infrastructure Enterprise
Réseau et connectivité
Certificat d’autorité de certification interne
Certificat d’autorité de certification interne
Secrets requis
Secrets requis
CORP_ROOT_CA_B64 — certificat PEM encodé en Base64 issu de votre autorité de certification d’entreprise. Générez-le avec : cat corp-root-ca.crt | base64 -w0Plusieurs certificats d’autorité de certification
Plusieurs certificats d’autorité de certification
Secrets requis
Secrets requis
CORP_ROOT_CA_B64 — certificat principal d’autorité de certification encodé en Base64 - CORP_INTERMEDIATE_CA_B64 — certificat intermédiaire d’autorité de certification encodé en Base64Proxy HTTP/HTTPS
Proxy HTTP/HTTPS
Secrets requis
Secrets requis
CORP_HTTP_PROXY— URL du proxy HTTP (p. ex.,http://proxy.corp.example.com:8080) -CORP_HTTPS_PROXY— URL du proxy HTTPS -CORP_NO_PROXY— liste d’hôtes, séparés par des virgules, à ne pas faire passer par le proxy (p. ex.,localhost,127.0.0.1,.corp.example.com)
Proxy authentifié
Proxy authentifié
Secrets requis
Secrets requis
PROXY_USER— Nom d’utilisateur du proxy -PROXY_PASS— Mot de passe du proxy -PROXY_HOST— Nom d’hôte et port du proxy (par ex.,proxy.corp.example.com:8080) -CORP_NO_PROXY— Hôtes à exclure du proxy
certificat d’autorité de certification + proxy (combinés)
certificat d’autorité de certification + proxy (combinés)
Secrets requis
Secrets requis
CORP_ROOT_CA_B64— certificat d’autorité de certification d’entreprise encodé en Base64 -CORP_HTTP_PROXY,CORP_HTTPS_PROXY— URL du proxy -CORP_NO_PROXY— hôtes à exclure du proxy
Connexion au VPN
Connexion au VPN
Secrets requis
Secrets requis
VPN_CONFIG_B64— Fichier de configuration OpenVPN encodé en Base64 (.ovpn). Générez-le avec :cat corp.ovpn | base64 -w0VPN_AUTH_USER(facultatif) — Nom d’utilisateur du VPN, si votre VPN nécessite une authentification par nom d’utilisateur et mot de passeVPN_AUTH_PASS(facultatif) — Mot de passe du VPN
WG_CONFIG_B64— Fichier de configuration WireGuard encodé en Base64. Générez-le avec :cat wg0.conf | base64 -w0
Résolution DNS personnalisée
Résolution DNS personnalisée
Identité et sécurité
Signature GPG des commits
Signature GPG des commits
Secrets requis
Secrets requis
GPG_PRIVATE_KEY_B64— Clé privée GPG encodée en Base64. Générez-la avec :gpg --export-secret-keys <key-id> | base64 -w0GIT_USER_NAME— Nom de l’auteur Git (p. ex.,Devin AI)GIT_USER_EMAIL— Adresse e-mail de l’auteur Git. Doit correspondre à un UID de la clé GPG, sinon GitHub ne vérifiera pas la signature.
Identité Git et clés SSH
Identité Git et clés SSH
Secrets requis
Secrets requis
GIT_USER_NAME— Nom de l’auteur Git -GIT_USER_EMAIL— Adresse e-mail de l’auteur Git -SSH_PRIVATE_KEY_B64— Clé privée SSH encodée en Base64. Générez-la avec :cat ~/.ssh/id_ed25519 | base64 -w0-SSH_KNOWN_HOSTS_B64— Entrées du fichier known_hosts encodées en Base64. Générez-les avec :ssh-keyscan git.corp.internal | base64 -w0-SSH_CONFIG_B64(facultatif) — Fichier de configuration SSH encodé en Base64
Configuration du système
Packages du système
Packages du système
Variables d’environnement personnalisées
Variables d’environnement personnalisées
KEY=VALUE dans le fichier $ENVRC. Les variables écrites dans $ENVRC sont automatiquement exportées pour toutes les étapes suivantes ainsi que pour la session Devin (comme avec le $GITHUB_ENV de GitHub Actions).Paramètres régionaux et fuseau horaire
Paramètres régionaux et fuseau horaire
Limites de ressources (ulimits)
Limites de ressources (ulimits)
Remplacement du miroir APT
Remplacement du miroir APT
Secrets requis
Secrets requis
APT_MIRROR_URL — URL de votre miroir APT interne (p. ex., https://artifactory.example.com/artifactory/ubuntu-remote)Patterns avancés
Variables d’environnement avec direnv
Variables d’environnement avec direnv
initialize pour créer des fichiers .envrc. Direnv les charge automatiquement..envrc se chargent automatiquement. Aucun chargement manuel n’est nécessaire.Sélection de la version de Node par dépôt
Sélection de la version de Node par dépôt
.nvmrc.nvm use lit .nvmrc à la racine du dépôt. Assurez-vous que votre dépôt en contient un (p. ex. avec 20).Outils système personnalisés et PATH
Outils système personnalisés et PATH
initialize.GitHub Actions pour configurer l’outil
GitHub Actions pour configurer l’outil
setup-node et setup-python modifient le PATH et les variables d’environnement. Les binaires installés par une action sont disponibles dans toutes les étapes suivantes et dans maintenance. Seules les
GitHub Actions basées sur Node.js sont prises en charge. Les actions composites et celles basées sur Docker ne le sont pas.Proxy inverse HTTPS en local pour plusieurs applications
Proxy inverse HTTPS en local pour plusieurs applications
app.example.com, api.example.com et admin.example.com. Installez un seul proxy inverse dans initialize et faites pointer chaque nom d’hôte vers un port upstream local distinct.Caddy gère le routage et le TLS local dans un seul outil. Un Caddyfile associe chaque nom d’hôte à un upstream, et tls internal émet automatiquement, pour chaque nom d’hôte, un certificat approuvé à partir de l’autorité de certification intégrée à Caddy. caddy trust installe la racine de cette autorité dans le magasin de confiance du système, et l’ajout de cette même racine à la base de données NSS permet au navigateur de l’accepter.Importez votre Caddyfile via la section Pièces jointes de l’éditeur de blueprint ; il sera alors disponible sous la forme $FILE_CADDYFILE./etc/hosts permet à app.example.com de pointer vers 127.0.0.1 à l’intérieur de la session. Ajoutez une entrée pour chaque hostname que vous mettez dans le Caddyfile.Exemples full-stack
Stack complète pour entreprise (Artifactory)
Stack complète pour entreprise (Artifactory)
Secrets requis
Secrets requis
CORP_ROOT_CA_B64— certificat d’autorité de certification d’entreprise encodé en Base64CORP_HTTP_PROXY— URL du proxy HTTPCORP_HTTPS_PROXY— URL du proxy HTTPSCORP_NO_PROXY— hôtes à ne pas faire passer par le proxy
ARTIFACTORY_USER— nom d’utilisateur ArtifactoryARTIFACTORY_TOKEN— jeton d’API Artifactory ou mot de passeARTIFACTORY_MAVEN_URL— URL du dépôt Maven (p. ex.,https://artifactory.example.com/artifactory/maven-virtual)ARTIFACTORY_PYPI_URL— URL du dépôt PyPI (p. ex.,https://user:token@artifactory.example.com/artifactory/api/pypi/pypi-virtual/simple)ARTIFACTORY_NPM_URL— URL du dépôt npm (p. ex.,https://artifactory.example.com/artifactory/api/npm/npm-virtual)ARTIFACTORY_DOCKER_URL— URL du registre Docker (p. ex.,artifactory.example.com)
- À l’échelle du compte (
initialize) : certificat et proxy - À l’échelle de l’organisation (
initialize) : Installation des runtimes de langage - À l’échelle de l’organisation (
maintenance) : Identifiants du registre (actualisés pendant les builds, mis à disposition de l’agent au début de la session)
Plusieurs langages avec différents dépôts
Plusieurs langages avec différents dépôts
Secrets requis
Secrets requis
NEXUS_MAVEN_URL— URL du dépôt Maven NexusNEXUS_USER— nom d’utilisateur NexusNEXUS_PASS— mot de passe NexusGITHUB_PACKAGES_TOKEN— jeton d’accès personnel GitHub avec le périmètreread:packagesARTIFACTORY_USER— nom d’utilisateur ArtifactoryARTIFACTORY_TOKEN— jeton d’API ArtifactoryGIT_TOKEN— jeton d’accès personnel pour les modules Go privés
Environnement en air gap avec des miroirs privés
Environnement en air gap avec des miroirs privés
Secrets requis
Secrets requis
CORP_ROOT_CA_B64— certificat d’autorité de certification de l’entreprise encodé en Base64
APT_MIRROR_URL— URL du miroir APT Ubuntu interneMIRROR_USER— nom d’utilisateur d’authentification au miroirMIRROR_PASS— mot de passe d’authentification au miroirJDK_TARBALL_URL— URL pour télécharger l’archive tar du JDK depuis le miroir interneNODE_TARBALL_URL— URL pour télécharger l’archive tar de Node.js depuis le miroir interne
INTERNAL_MAVEN_URL— URL du registre Maven interneINTERNAL_NPM_URL— URL du registre npm interneINTERNAL_PYPI_URL— URL du registre PyPI interne
VPN + certificats + proxy + langages
VPN + certificats + proxy + langages
Secrets requis
Secrets requis
VPN_CONFIG_B64— fichier de configuration OpenVPN encodé en Base64
CORP_ROOT_CA_B64— certificat d’autorité de certification d’entreprise encodé en Base64CORP_HTTP_PROXY— URL du proxy HTTPCORP_HTTPS_PROXY— URL du proxy HTTPSCORP_NO_PROXY— hôtes à contourner via le proxy
MAVEN_REGISTRY_URL— URL du registre MavenNPM_REGISTRY_URL— URL du registre npmPYPI_REGISTRY_HOST— nom d’hôte du registre PyPIREGISTRY_USER— nom d’utilisateur du registre (pour Maven et pip)REGISTRY_PASS— mot de passe du registre (pour Maven et pip)REGISTRY_TOKEN— jeton d’authentification npm
initialize est important. Le VPN doit venir en premier (pour que les hôtes internes soient accessibles), puis le DNS (pour que la résolution des noms fonctionne), puis les certificats (pour que HTTPS fonctionne), puis le proxy (pour que le trafic soit correctement acheminé), et enfin les environnements d’exécution (qui peuvent télécharger depuis des miroirs internes).Conseils pour rédiger de bons blueprints
- Testez d’abord les commandes dans une session. Exécutez-les manuellement dans une session Devin avant de les ajouter à votre blueprint. C’est plus rapide que d’attendre un cycle de build complet.
- Utilisez
initializepour les outils à installer une seule fois, etmaintenancepour les dépendances. Tout ce qui prend plusieurs minutes à installer (compilateurs, gros binaires, outils globaux) doit aller dansinitialize. Les commandes de dépendances rapides (npm install,uv sync) vont dansmaintenance. - Veillez à ce que les commandes
maintenancerestent rapides. Visez moins de 2 minutes. Elles s’exécutent pendant les builds et sont exposées à l’agent au démarrage de la session. - Utilisez
$ENVRCpour les variables d’environnement. N’écrivez pas dans.bashrcou.profile.$ENVRCest le mécanisme pris en charge pour définir des variables entre les étapes et les sessions. - Nommez vos étapes. La syntaxe développée avec des champs
namepermet d’identifier beaucoup plus facilement les échecs dans les journaux de build. - Utilisez des subshells pour les monorepos.
(cd packages/foo && npm install)s’exécute dans un subshell afin que les étapes suivantes ne soient pas affectées par le changement de répertoire. - Utilisez
npm install, pasnpm ci.npm cisupprimenode_moduleset réinstalle tout depuis zéro, ce qui est trop lent pourmaintenance. - Utilisez les secrets du dépôt pour les valeurs sensibles. Configurez-les dans l’onglet Secrets de l’éditeur de blueprint du dépôt plutôt que de les coder en dur dans les blueprints.

