exec explicites, par exemple env={"REGISTRY_TOKEN": "secret:repo:owner/repo:REGISTRY_TOKEN"}. Consultez Secrets. Ne codez jamais en dur des credentials dans votre blueprint.Démarrage rapide
Blueprints minimaux pour les configurations les plus courantes. Copiez-en un, collez-le dans l’éditeur de blueprints, et le tour est joué.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
Étapes de build propres à chaque dépôt, gestion des dépendances et entrées Knowledge. Définissez-les dans Settings > Environnement > Blueprints > [votre 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 exécution de la commande.Go
Configuration Go standard avec modules.Java
- Gradle
- Maven
Ruby on Rails
Configuration de Rails avec PostgreSQL.Rust
Configuration standard de Rust avec Cargo.Monorepos
- Multilingue
- Versions multiples de JDK
Registres de packages privés
Configurez les gestionnaires de paquets pour résoudre les dépendances depuis des registres privés. Définissez ces paramètres dans Settings > Environment > Blueprints > Org-wide setup (ou par repo si un seul repo en a besoin).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ètreread:packages
Registres 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)
source ... && dans maintenance, après l’étape de configuration. Encodez en pourcentage les caractères spéciaux des credentials présents dans l’URL.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 registreREGISTRY_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 exemplehttps://athens.corp.internal)
maintenance du blueprint du repository, où go.mod est disponible. Ne l’exécutez pas dans le setup à l’échelle de l’organisation, qui s’exécute avant le clonage des repositories..NET / NuGet
.NET / NuGet
Secrets requis
Secrets requis
NUGET_SOURCE_URL— URL de votre flux NuGetNuGetPackageSourceCredentials_private— Credentials du flux au format d’environnement NuGet :Username=any;Password=<PAT>(utilisez le username requis par votre flux)
Docker
Docker
Secrets requis
Secrets requis
DOCKER_MIRROR_URL(optionnel) — URL de votre miroir Docker Hub (par ex.,https://mirror.corp.internal)DOCKER_REGISTRY_URL— URL de votre registre de conteneurs privé (par ex.,registry.corp.internal:5000)DOCKER_REGISTRY_USER— Nom d’utilisateur du registreDOCKER_REGISTRY_PASS— Mot de passe ou token d’API du registre
Rust / Cargo
Rust / Cargo
Secrets requis
Secrets requis
CARGO_REGISTRY_INDEX— URL de l’index du registre privé (par ex.sparse+https://cargo.corp.internal/api/v1/crates/)CARGO_REGISTRIES_PRIVATE_TOKEN— Jeton d’authentification pour le registre nomméprivate
cargo:token de Cargo lit le token du registre nommé depuis l’environnement ; n’exécutez pas cargo login dans une étape de build.Ruby / Bundler
Ruby / Bundler
Secrets requis
Secrets requis
GEM_SERVER_URL— URL de votre serveur de gems privé (par exemple,https://artifactory.example.com/artifactory/api/gems/gems-virtual)BUNDLE_ARTIFACTORY__EXAMPLE__COM—username:passwordpourartifactory.example.com; adaptez le nom de la variable à votre serveur de gems
GEM_SERVER_URL sans credential. Pour la variable de credential de Bundler, préfixez le hostname en majuscules par BUNDLE_, remplacez chaque point par __ et chaque tiret par ___.PHP / Composer
PHP / Composer
Secrets requis
Secrets requis
COMPOSER_REGISTRY_URL— URL de votre registre Composer privé (par exemplehttps://repo.packagist.com/<org>)COMPOSER_AUTH— credentials JSON pour l’hôte du registre, par exemple{"http-basic":{"repo.packagist.com":{"username":"<user>","password":"<token>"}}}
COMPOSER_REGISTRY_URL sans credential.Renouvellement du jeton AWS CodeArtifact
Renouvellement du jeton AWS CodeArtifact
awscli est préinstallé sur l’image de base de Devin. Seuls le rafraîchissement du token et la configuration du registre restent à votre charge.Secrets requis
Secrets requis
AWS_ACCESS_KEY_IDetAWS_SECRET_ACCESS_KEY— credentials IAM disposant des autorisationscodeartifact:GetAuthorizationTokenetsts:GetServiceBearerTokenCA_DOMAIN— Le nom de votre domaine CodeArtifactCA_DOMAIN_OWNER— ID de l’AWS account propriétaire du domaineCA_REGION— Région AWS (par ex.us-east-1)CA_NPM_REPO,CA_PYPI_REPO,CA_MAVEN_REPO— Noms des repositories pour chaque écosystème
source ... && appropriée en tant qu’étape de build ultérieure. Le token récupéré reste dans l’environnement de ce shell : ne le rendez pas persistant via aws codeartifact login, via npm config set avec un token développé, ni via un fichier pip.conf contenant des credentials.Infrastructure Enterprise
Infrastructure au niveau des machines qui s’applique à l’ensemble des organisations et des repos. Définissez ces paramètres dans Enterprise Settings > Environments > Blueprint (à l’échelle de l’entreprise) ou Settings > environnement > Blueprints > configuration à l’échelle de l’organisation (à l’échelle de l’organisation).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 -w0
openssl x509 n’écrit que le certificat analysé : une clé privée incluse par inadvertance n’est donc pas copiée dans le magasin de certificats de confiance. Fournissez chaque certificat d’autorité de certification séparément, comme dans l’exemple suivant.Plusieurs 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 Base64CORP_INTERMEDIATE_CA_B64— certificat intermédiaire d’autorité de certification encodé en Base64
Proxy 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 HTTPSCORP_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 proxyPROXY_PASS— Mot de passe du proxyPROXY_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 Base64CORP_HTTP_PROXY,CORP_HTTPS_PROXY— URL du proxyCORP_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
curl par le travail qui nécessite le tunnel. La configuration doit contenir en ligne les certificats et clés requis et utiliser dev tun0 ; n’activez pas de service VPN persistant.WG_CONFIG_B64 disponible, en remplaçant la commande curl par votre opération :maintenance ne les rend pas temporaires. Ne créez pas de snapshot d’un tunnel actif ou d’une configuration VPN privée.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érer avec :gpg --export-secret-keys <key-id> | base64 -w0GPG_SIGNING_KEY— empreinte complète de la clé de signatureGIT_USER_NAME— nom de l’auteur Git (par exemple,Devin AI)GIT_USER_EMAIL— adresse e-mail de l’auteur Git. Doit correspondre à un UID de la clé GPG, faute de quoi 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 GitGIT_USER_EMAIL— adresse e-mail de l’auteur GitSSH_PRIVATE_KEY_B64— clé privée SSH encodée en Base64. À générer avec :cat ~/.ssh/id_ed25519 | base64 -w0SSH_KNOWN_HOSTS_B64— entrées known hosts encodées en Base64, vérifiées par rapport aux empreintes de clés d’hôte publiées par l’administrateur de votre serveur
Configuration du système
Packages du système
Packages du système
Variables d’environnement personnalisées
Variables d’environnement personnalisées
$ENVRC.L’approche recommandée consiste à écrire des lignes 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
initialize d’un blueprint. Cela est utile pour installer des versions spécifiques d’outils via les mêmes actions que celles utilisées par votre CI.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. Les actions Node.js et composites sont prises en charge ; les actions Docker ne le sont que sur les builds Linux. Les étapes uses ne peuvent pas s’exécuter dans maintenance. Voir les limites des GitHub Actions.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
Ces exemples montrent comment les configurations Enterprise et celles au niveau de l’org se combinent. En pratique, vous les répartiriez entre plusieurs périmètres. Elles sont regroupées ici à titre de référence.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) : Configuration du registre contenant des références littérales - Commandes de session : fournir explicitement les secrets, sourcer la configuration de l’environnement et se connecter pour chaque opération Docker
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 Artifactory
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 à ne pas faire passer par 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
VPN_CONFIG_B64 doit contenir les certificats/clés en ligne, utiliser dev tun0 et se connecter sans authentification interactive. Les téléchargements des environnements d’exécution s’effectuent au sein d’un même cycle de vie du tunnel et chargent explicitement l’environnement du proxy. Répétez le bloc de configuration/nettoyage du VPN décrit dans Réseau et connectivité pour les opérations de session ; le blueprint ne reconnecte pas le VPN au début de la session.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 non sensibles. N’écrivez pas de credentials ni de tokens dérivés dans$ENVRC,.bashrcou.profile. Sourcez explicitement la configuration shell dépendant de secrets dans la commande qui en a besoin. - 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 repository pour les valeurs sensibles. Configurez-les dans l’onglet Secrets de l’éditeur de blueprint du repository plutôt que de les coder en dur dans les blueprints.

