exec-Umgebungsbindungen, etwa env={"REGISTRY_TOKEN": "secret:repo:owner/repo:REGISTRY_TOKEN"}. Siehe Secrets. Hinterlegen Sie Anmeldedaten niemals fest codiert in Ihrem Blueprint.Schnellstart
Minimale Blueprints für die gängigsten Setups. Kopieren Sie einen, fügen Sie ihn in den Blueprint-Editor ein, und Sie sind fertig.Node.js-Projekt
Node.js-Projekt
Python-Projekt
Python-Projekt
Full-Stack (Node + Python)
Full-Stack (Node + Python)
Repository-Blueprints
Repo-spezifische Build-Schritte, Abhängigkeitsmanagement und Knowledge-Einträge. Lege diese unter Settings > Environment > Blueprints > [dein Repo] fest.Python
- uv (empfohlen)
- pip + venv
Node.js
- npm
- pnpm
maintenance npm install (nicht npm ci). Dadurch wird ein inkrementelles Update durchgeführt, während npm ci node_modules löscht und bei jeder Ausführung des Befehls alles von Grund auf neu installiert.Go
Standard-Setup für Go mit Modulen.Java
- Gradle
- Maven
Ruby on Rails
Rails-Setup mit PostgreSQL.Rust
Standardmäßiges Rust-Setup mit Cargo.Monorepos
- Mehrsprachig
- Mehrere JDK-Versionen
Private Package-Registries
Konfiguriere Package Manager so, dass sie Dependencies aus privaten Registries beziehen. Lege dies unter Settings > Environment > Blueprints > Org-wide setup fest (oder pro Repo, falls nur ein Repo es benötigt).Node.js-Registries
- npm (scoped)
- npm (full mirror)
- pnpm
- Yarn
@myorg/*) aus einer privaten Registry bezogen werden, während öffentliche Packages weiterhin aus der Standard-npm-Registry kommen.Erforderliche Secrets
Erforderliche Secrets
GITHUB_PACKAGES_TOKEN— Personal Access Token oder GitHub-App-Token mit dem Geltungsbereichread:packages
Python-Registries
- pip / uv
- Poetry
Erforderliche Secrets
Erforderliche Secrets
PYPI_REGISTRY_URL— Vollständige URL Ihres PyPI-Index, einschließlich Anmeldedaten, falls erforderlich (z. B.https://user:token@nexus.example.com/repository/pypi-proxy/simple)
source ... &&-Befehl nach dem Konfigurationsschritt in maintenance ein. Sonderzeichen in Anmeldedaten innerhalb der URL müssen prozentkodiert werden.JVM-Registries
- Maven
- Gradle
Erforderliche Secrets
Erforderliche Secrets
MAVEN_REGISTRY_URL— URL Ihrer Maven-Registry (z. B.https://artifactory.example.com/artifactory/maven-virtual)REGISTRY_USER— Registry-NutzernameREGISTRY_PASS— Registry-Passwort oder API-Token
Weitere Registries
Go-Modul-Proxy
Go-Modul-Proxy
Erforderliche Secrets
Erforderliche Secrets
GO_PROXY_URL— URL Ihres Go-Modul-Proxys (z. B.https://athens.corp.internal)
maintenance des Repository-Blueprints hinzu, wo go.mod verfügbar ist. Führen Sie ihn nicht im Org-wide setup aus, da dieses vor dem Klonen der Repositorys ausgeführt wird..NET / NuGet
.NET / NuGet
Erforderliche Secrets
Erforderliche Secrets
NUGET_SOURCE_URL— URL Ihres NuGet-FeedsNuGetPackageSourceCredentials_private— Feed-Anmeldedaten im Umgebungsformat von NuGet:Username=any;Password=<PAT>(verwenden Sie den von Ihrem Feed geforderten Nutzernamen)
Docker
Docker
docker login kann Anmeldedaten in sein Konfigurationsverzeichnis schreiben. Verwenden Sie für jeden Vorgang ein isoliertes Verzeichnis und entfernen Sie es auch dann, wenn der Pull fehlschlägt. Führen Sie die Login-und-Pull-Sequenz erneut aus, wenn Sie in einer Sitzung ein weiteres Image benötigen.Erforderliche Secrets
Erforderliche Secrets
DOCKER_MIRROR_URL(optional) — URL Ihres Docker-Hub-Mirrors (z. B.https://mirror.corp.internal)DOCKER_REGISTRY_URL— URL Ihrer privaten Container-Registry (z. B.registry.corp.internal:5000)DOCKER_REGISTRY_USER— Registry-NutzernameDOCKER_REGISTRY_PASS— Registry-Passwort oder API-Token
Rust / Cargo
Rust / Cargo
Erforderliche Secrets
Erforderliche Secrets
CARGO_REGISTRY_INDEX— URL des privaten Registry-Index (z. B.sparse+https://cargo.corp.internal/api/v1/crates/)CARGO_REGISTRIES_PRIVATE_TOKEN— Auth-Token für die Registry mit dem Namenprivate
cargo:token-Anbieter von Cargo liest das benannte Registry-Token aus der Umgebung; führen Sie cargo login nicht in einem Build-Schritt aus.Ruby / Bundler
Ruby / Bundler
Erforderliche Secrets
Erforderliche Secrets
GEM_SERVER_URL— URL Ihres privaten Gem-Servers (z. B.https://artifactory.example.com/artifactory/api/gems/gems-virtual)BUNDLE_ARTIFACTORY__EXAMPLE__COM—username:passwordfürartifactory.example.com; passen Sie den Variablennamen an Ihren Gem-Server an
GEM_SERVER_URL ohne Credentials. Stellen Sie für die Credential-Variable von Bundler dem Hostname in Großbuchstaben das Präfix BUNDLE_ voran, ersetzen Sie jeden Punkt durch __ und jeden Bindestrich durch ___.PHP / Composer
PHP / Composer
Erforderliche Secrets
Erforderliche Secrets
COMPOSER_REGISTRY_URL— URL Ihrer privaten Composer-Registry (z. B.https://repo.packagist.com/<org>)COMPOSER_AUTH— JSON-Anmeldedaten für den Registry-Host, etwa{"http-basic":{"repo.packagist.com":{"username":"<user>","password":"<token>"}}}
COMPOSER_REGISTRY_URL ohne Credentials.AWS CodeArtifact-Token-Aktualisierung
AWS CodeArtifact-Token-Aktualisierung
source im selben Shell-Befehl wie npm, pip oder Maven ein, um ein Token zu erhalten. Wird das Skript in einem Blueprint gespeichert, wird es beim Start der Sitzung nicht ausgeführt.awscli ist vorinstalliert im Base-Image von Devin. Sie müssen lediglich die Token-Aktualisierung und die Registry-Konfiguration einrichten.Erforderliche Secrets
Erforderliche Secrets
AWS_ACCESS_KEY_IDundAWS_SECRET_ACCESS_KEY— IAM-Anmeldedaten mit den Berechtigungencodeartifact:GetAuthorizationTokenundsts:GetServiceBearerTokenCA_DOMAIN— Ihr CodeArtifact-DomainnameCA_DOMAIN_OWNER— ID des AWS-Kontos, dem die Domain gehörtCA_REGION— AWS-Region (z. B.us-east-1)CA_NPM_REPO,CA_PYPI_REPO,CA_MAVEN_REPO— Repository-Namen für das jeweilige Ökosystem
source ... && als späteren Build-Schritt hinzu. Das abgerufene Token bleibt in der Environment dieser Shell erhalten; speichern Sie es nicht dauerhaft mit aws codeartifact login, npm config set mit einem expandierten Token oder einer pip.conf, die Credentials enthält.Enterprise-Infrastruktur
Infrastruktur auf Maschinenebene, die für alle Orgs und Repos gilt. Legen Sie diese in Enterprise Settings > Environments > Blueprint (unternehmensweit) oder Settings > Environment > Blueprints > Org-wide setup (org-weit) fest.Netzwerk und Konnektivität
Unternehmens-CA-Zertifikat
Unternehmens-CA-Zertifikat
Erforderliche Secrets
Erforderliche Secrets
CORP_ROOT_CA_B64— Base64-kodiertes PEM-Zertifikat von der CA Ihres Unternehmens. erzeugen mit:cat corp-root-ca.crt | base64 -w0
openssl x509 schreibt nur das geparste Zertifikat, sodass ein versehentlich enthaltener privater Schlüssel nicht in den Trust Store kopiert wird. Geben Sie jedes CA-Zertifikat separat an, wie im nächsten Beispiel.Mehrere CA-Zertifikate
Mehrere CA-Zertifikate
Erforderliche Secrets
Erforderliche Secrets
CORP_ROOT_CA_B64— Base64-codiertes primäres CA-ZertifikatCORP_INTERMEDIATE_CA_B64— Base64-codiertes Zwischenzertifikat
HTTP/HTTPS-Proxy
HTTP/HTTPS-Proxy
Erforderliche Secrets
Erforderliche Secrets
CORP_HTTP_PROXY— HTTP-Proxy-URL (z. B.http://proxy.corp.example.com:8080)CORP_HTTPS_PROXY— HTTPS-Proxy-URLCORP_NO_PROXY— kommagetrennte Liste der Hosts, die den Proxy umgehen sollen (z. B.localhost,127.0.0.1,.corp.example.com)
Proxy mit Authentifizierung
Proxy mit Authentifizierung
Erforderliche Secrets
Erforderliche Secrets
PROXY_USER— Proxy-NutzernamePROXY_PASS— Proxy-PasswortPROXY_HOST— Proxy-Hostname und -Port (z. B.proxy.corp.example.com:8080)CORP_NO_PROXY— Hosts, für die der Proxy umgangen werden soll
CA-Zertifikat + Proxy (kombiniert)
CA-Zertifikat + Proxy (kombiniert)
Erforderliche Secrets
Erforderliche Secrets
CORP_ROOT_CA_B64— Base64-kodiertes Unternehmens-CA-ZertifikatCORP_HTTP_PROXY,CORP_HTTPS_PROXY— Proxy-URLsCORP_NO_PROXY— Hosts, die den Proxy umgehen
VPN-Verbindung
VPN-Verbindung
Erforderliche Secrets
Erforderliche Secrets
VPN_CONFIG_B64— Base64-kodierte OpenVPN-Konfigurationsdatei (.ovpn). Erzeugen mit:cat corp.ovpn | base64 -w0VPN_AUTH_USER(optional) — VPN-Nutzername, falls Ihr VPN eine Authentifizierung per Nutzername/Passwort erfordertVPN_AUTH_PASS(optional) — VPN-Passwort
WG_CONFIG_B64— Base64-kodierte WireGuard-Konfigurationsdatei. Erzeugen mit:cat wg0.conf | base64 -w0
curl-Befehl durch die Arbeit, die den Tunnel benötigt. Die Konfiguration muss die erforderlichen Zertifikate und Keys inline enthalten und dev tun0 verwenden; aktivieren Sie keinen dauerhaften VPN-Dienst.WG_CONFIG_B64 aus und ersetzen Sie den curl-Befehl durch Ihre Operation:maintenance macht sie nicht temporär. Erstellen Sie keinen Snapshot eines aktiven Tunnels oder einer privaten VPN-Konfiguration.Benutzerdefinierte DNS-Namensauflösung
Benutzerdefinierte DNS-Namensauflösung
Identität und Sicherheit
GPG commit signing
GPG commit signing
Erforderliche Secrets
Erforderliche Secrets
GPG_PRIVATE_KEY_B64— Base64-kodierter privater GPG-Schlüssel. Erzeugen mit:gpg --export-secret-keys <key-id> | base64 -w0GPG_SIGNING_KEY— Vollständiger Fingerabdruck des SignaturschlüsselsGIT_USER_NAME— Git-Autorenname (z. B.Devin AI)GIT_USER_EMAIL— Git-Autoren-E-Mail. Muss mit einer UID des GPG-Schlüssels übereinstimmen, sonst verifiziert GitHub die Signatur nicht.
Git identity und SSH keys
Git identity und SSH keys
Erforderliche Secrets
Erforderliche Secrets
GIT_USER_NAME— Git-AutorennameGIT_USER_EMAIL— Git-Autoren-E-MailSSH_PRIVATE_KEY_B64— Base64-kodierter privater SSH-Schlüssel. Erzeugen mit:cat ~/.ssh/id_ed25519 | base64 -w0SSH_KNOWN_HOSTS_B64— Base64-kodierte Known-Hosts-Einträge, abgeglichen mit den von Ihrem Serveradministrator veröffentlichten Host-Key-Fingerabdrücken
Systemkonfiguration
Systempakete
Systempakete
Benutzerdefinierte Umgebungsvariablen
Benutzerdefinierte Umgebungsvariablen
$ENVRC.Es wird empfohlen, Zeilen im Format KEY=VALUE in die Datei $ENVRC zu schreiben. In $ENVRC geschriebene Variablen werden automatisch für alle nachfolgenden Schritte und die Devin-Sitzung exportiert (ähnlich wie bei $GITHUB_ENV in GitHub Actions’).Region und Zeitzone
Region und Zeitzone
Ressourcenlimits (ulimits)
Ressourcenlimits (ulimits)
APT-Mirror ersetzen
APT-Mirror ersetzen
Erforderliche Secrets
Erforderliche Secrets
APT_MIRROR_URL— URL Ihres internen APT-Mirrors (z. B.https://artifactory.example.com/artifactory/ubuntu-remote)
Fortgeschrittene Nutzungsmuster
Umgebungsvariablen mit direnv
Umgebungsvariablen mit direnv
initialize, um .envrc-Dateien zu erstellen. Direnv lädt sie automatisch..envrc-Variablen automatisch geladen werden. Ein manuelles Sourcing ist nicht nötig.Node-Version pro Repository wechseln
Node-Version pro Repository wechseln
.nvmrc zu wechseln.nvm use liest die .nvmrc aus dem Repo-Stammverzeichnis. Stellen Sie sicher, dass Ihr Repository eine solche Datei enthält (z. B. mit 20 als Inhalt).Authentifizierung im Browser (Playwright)
Authentifizierung im Browser (Playwright)
localhost:29229 bereit. Verwenden Sie Playwright-Skripte, um browserbasierte Anmeldungen zu automatisieren.scripts/login.py):Benutzerdefinierte System-Tools und PATH
Benutzerdefinierte System-Tools und PATH
initialize.GitHub Actions zum Einrichten von Tools
GitHub Actions zum Einrichten von Tools
initialize-Abschnitt eines Blueprints. Das ist nützlich, um bestimmte Tool-Versionen über dieselben Actions zu installieren, die auch in Ihrer CI verwendet werden.setup-node und setup-python ändern PATH und Umgebungsvariablen. Von einer Action installierte Binärdateien sind in allen nachfolgenden Schritten und in maintenance verfügbar. Node.js- und Composite-Actions werden unterstützt; Docker-Actions werden nur in Linux-Builds unterstützt. uses-Schritte können nicht in maintenance ausgeführt werden. Siehe Einschränkungen von GitHub Actions.Lokaler HTTPS-Reverse-Proxy für mehrere Apps
Lokaler HTTPS-Reverse-Proxy für mehrere Apps
app.example.com, api.example.com und admin.example.com. Installieren Sie in initialize einen einzelnen Reverse-Proxy und leiten Sie jeden Hostname an einen anderen lokalen Upstream-Port weiter.Caddy übernimmt Routing und lokales TLS in einem einzigen Tool. Eine Caddyfile weist jeden Hostname einem Upstream zu, und tls internal stellt automatisch für jeden Hostname ein vertrauenswürdiges Zertifikat von Caddys integrierter CA aus. caddy trust installiert dieses CA-Root im System-Trust-Store, und wenn Sie dasselbe Root auch zur NSS-Datenbank hinzufügen, akzeptiert es der Browser ebenfalls.Laden Sie Ihre Caddyfile über den Abschnitt Dateianhänge im Blueprint-Editor hoch; sie ist dann als $FILE_CADDYFILE verfügbar./etc/hosts-Schleife sorgt dafür, dass app.example.com innerhalb der Sitzung auf 127.0.0.1 verweist. Fügen Sie für jeden Hostnamen, den Sie in die Caddyfile eintragen, einen Eintrag hinzu.Full-Stack-Beispiele
Diese Beispiele zeigen, wie Konfigurationen auf Enterprise- und Org-Ebene zusammenwirken. In der Praxis würden Sie diese auf verschiedene Geltungsbereiche aufteilen. Sie sind hier der Übersicht halber zusammen dargestellt.Kompletter Enterprise-Stack (Artifactory)
Kompletter Enterprise-Stack (Artifactory)
Benötigte Secrets
Benötigte Secrets
CORP_ROOT_CA_B64— Base64-kodiertes Unternehmens-CA-ZertifikatCORP_HTTP_PROXY— HTTP-Proxy-URLCORP_HTTPS_PROXY— HTTPS-Proxy-URLCORP_NO_PROXY— Hosts, die den Proxy umgehen sollen
ARTIFACTORY_USER— Artifactory-NutzernameARTIFACTORY_TOKEN— Artifactory-API-Token oder PasswortARTIFACTORY_MAVEN_URL— Maven-Repository-URL (z. B.https://artifactory.example.com/artifactory/maven-virtual)ARTIFACTORY_PYPI_URL— PyPI-Repository-URL (z. B.https://user:token@artifactory.example.com/artifactory/api/pypi/pypi-virtual/simple)ARTIFACTORY_NPM_URL— npm-Repository-URL (z. B.https://artifactory.example.com/artifactory/api/npm/npm-virtual)ARTIFACTORY_DOCKER_URL— Docker-Registry-URL (z. B.artifactory.example.com)
- Kontoweit (
initialize): Zertifikat und Proxy - Organisationsweit (
initialize): Installationen von Laufzeitumgebungen für Programmiersprachen - Organisationsweit (
maintenance): Registry-Konfiguration mit literalen Referenzen - Sitzungsbefehle: Secrets explizit bereitstellen, Environment-Setup per
sourceladen und sich für einzelne Docker-Operationen anmelden
Mehrsprachigkeit mit verschiedenen Registries
Mehrsprachigkeit mit verschiedenen Registries
Erforderliche Secrets
Erforderliche Secrets
NEXUS_MAVEN_URL— URL des Nexus-Maven-RepositorysNEXUS_USER— Nexus-NutzernameNEXUS_PASS— Nexus-PasswortGITHUB_PACKAGES_TOKEN— GitHub Personal Access Token mit dem Geltungsbereichread:packagesARTIFACTORY_USER— Artifactory-NutzernameARTIFACTORY_TOKEN— Artifactory-API-Token
Air-Gap-Umgebung mit privaten Mirrors
Air-Gap-Umgebung mit privaten Mirrors
Erforderliche Secrets
Erforderliche Secrets
CORP_ROOT_CA_B64— Base64-kodiertes Unternehmens-CA-Zertifikat
APT_MIRROR_URL— URL des internen Ubuntu-APT-MirrorsMIRROR_USER— Nutzername für die Authentifizierung am MirrorMIRROR_PASS— Passwort für die Authentifizierung am MirrorJDK_TARBALL_URL— URL zum Herunterladen des JDK-Tarballs vom internen MirrorNODE_TARBALL_URL— URL zum Herunterladen des Node.js-Tarballs vom internen Mirror
INTERNAL_MAVEN_URL— URL der internen Maven-RegistryINTERNAL_NPM_URL— URL der internen npm-RegistryINTERNAL_PYPI_URL— URL der internen PyPI-Registry
VPN + Zertifikate + Proxy + Sprachen
VPN + Zertifikate + Proxy + Sprachen
Benötigte Secrets
Benötigte Secrets
VPN_CONFIG_B64— Base64-kodierte OpenVPN-Konfigurationsdatei
CORP_ROOT_CA_B64— Base64-kodiertes Unternehmens-CA-ZertifikatCORP_HTTP_PROXY— HTTP-Proxy-URLCORP_HTTPS_PROXY— HTTPS-Proxy-URLCORP_NO_PROXY— Hosts, die den Proxy umgehen
MAVEN_REGISTRY_URL— Maven-Registry-URLNPM_REGISTRY_URL— npm-Registry-URLPYPI_REGISTRY_HOST— PyPI-Registry-HostnameREGISTRY_USER— Registry-Nutzername (für Maven und pip)REGISTRY_PASS— Registry-Passwort (für Maven und pip)REGISTRY_TOKEN— npm-Auth-Token
VPN_CONFIG_B64 muss Inline-Zertifikate/-Schlüssel enthalten, dev tun0 verwenden und sich ohne interaktive Authentifizierung verbinden. Die Runtime-Downloads laufen innerhalb eines Tunnel-Lifecycles und laden die Proxy-Umgebung explizit. Wiederholen Sie den VPN-Setup-/Cleanup-Block unter Netzwerk und Konnektivität für Sitzungsvorgänge; der Blueprint stellt die VPN-Verbindung zu Sitzungsbeginn nicht erneut her.Tipps zum Schreiben guter Blueprints
- Teste Befehle zuerst in einer Sitzung. Führe Befehle manuell in einer Devin-Sitzung aus, bevor du sie deinem Blueprint hinzufügst. Das geht schneller, als auf einen vollständigen Build-Zyklus zu warten.
- Verwende
initializefür Tools, die nur einmal installiert werden, undmaintenancefür Abhängigkeiten. Alles, was mehrere Minuten für die Installation braucht (Compiler, große Binärdateien, globale Tools), gehört ininitialize. Schnelle Befehle für Abhängigkeiten (npm install,uv sync) gehören inmaintenance. - Halte
maintenance-Befehle schnell. Sie sollten nach Möglichkeit in unter 2 Minuten laufen. Diese Befehle werden während Builds ausgeführt und dem Agenten zu Sitzungsbeginn angezeigt. - Verwende
$ENVRCfür Umgebungsvariablen, die keine Secrets enthalten. Schreibe keine Anmeldedaten oder abgeleiteten Tokens in$ENVRC,.bashrcoder.profile. Lade Shell-Setup, das von Secrets abhängt, explizit in dem Befehl, der es benötigt. - Gib deinen Schritten Namen. Die erweiterte Form mit
name-Feldern macht Fehler in Build-Logs deutlich leichter auffindbar. - Verwende Subshells für Monorepos.
(cd packages/foo && npm install)läuft in einer Subshell, sodass nachfolgende Schritte nicht von der Verzeichnisänderung betroffen sind. - Verwende
npm install, nichtnpm ci.npm cilöschtnode_modulesund installiert alles von Grund auf neu, was fürmaintenancezu langsam ist. - Verwende Repo-Secrets für sensible Werte. Konfiguriere sie im Secrets-Tab des Blueprint-Editors des Repos, statt sie fest in Blueprints zu hinterlegen.

