Zum Hauptinhalt springen
Sie müssen dies nicht von Hand schreiben. Am einfachsten richten Sie Ihre Umgebung ein, indem Sie eine Devin-Sitzung starten und Devin bitten, das Repo zu konfigurieren. Devin analysiert das Projekt, installiert Abhängigkeiten und schlägt eine Konfiguration vor — Sie klicken in Ihrer Timeline auf den Vorschlagskarten auf Approve. Diese Anleitung ist für Fälle gedacht, in denen Sie verstehen möchten, was Devin erstellt hat, die Konfiguration anpassen oder eine Konfiguration von Grund auf neu schreiben möchten.

So funktioniert Devins Umgebung

Devin läuft auf einer eigenen VM. Jede Sitzung wird von einem Maschinenabbild gestartet — einem gespeicherten Snapshot mit Ihren vorinstallierten Tools, Repos und Dependencies. Sie legen fest, was in dieses Abbild aufgenommen wird, indem Sie Ihre Umgebungskonfiguration unter Settings > Devin’s Environment bearbeiten.

Konfiguration schreiben

Ihre environment.yaml hat drei Abschnitte:
AbschnittZweckWann sie ausgeführt wirdAusgeführt?
initializeTools installieren und Abhängigkeiten kompilierenNur beim Build — die Ergebnisse werden im Maschinenabbild gespeichertJa
maintenanceAbhängigkeiten aktuell halten, Konfigurationen für Anmeldedaten schreibenBeim Build und zu Beginn jeder SitzungJa
knowledgeKurze Hinweise zum Environment-Setup (z. B. lint/test-Befehle)Wird zu Beginn der Sitzung geladenNein — nur Referenzhinweise

initialize — einmalige Einrichtung

Verwenden Sie initialize für alles, was lange dauert oder nur einmal erfolgen muss: das Installieren von Paketmanagern, globalen CLI-Tools, das Kompilieren nativer Abhängigkeiten oder das Hinzufügen von Systempaketen. Die Ergebnisse werden im Maschinenabbild gespeichert und beim Start der Sitzung nicht erneut ausgeführt.
initialize: |
  curl -LsSf https://astral.sh/uv/install.sh | sh
  npm install -g pnpm
Die mehrzeilige Zeichenfolge wird als einzelnes Bash-Skript mit set -e ausgeführt, sodass jede fehlschlagende Zeile den Build abbricht. Verwenden Sie \ zur Zeilenfortsetzung oder wechseln Sie zur Erweiterten Form für benannte Schritte, die einzeln im Build-Log angezeigt werden.
Die Secrets-Datei wird entfernt, bevor das Maschinenabbild gespeichert wird. Wenn ein Befehl in initialize einen geheimen Wert in eine Konfigurationsdatei schreibt (z. B. ein Auth-Token in .npmrc), kann dieser Wert im Abbild erhalten bleiben — was ein Sicherheitsrisiko ist. Legen Sie Schritte, die Anmeldedaten schreiben, stattdessen in maintenance, wo Secrets in jeder Sitzung neu geladen werden.

Erweiterte Form

Verwenden Sie die Listenform, wenn Sie benannte Schritte benötigen. Benannte Schritte machen Build-Logs leichter zu debuggen — wenn etwas fehlschlägt, sehen Sie, welcher Schritt betroffen ist, statt nur eine Zeilennummer.
initialize:
  - name: Install uv
    run: curl -LsSf https://astral.sh/uv/install.sh | sh
  - name: Install system packages
    run: |
      sudo apt-get update -qq
      sudo DEBIAN_FRONTEND=noninteractive apt-get install -y -qq libpq-dev ffmpeg
Sie können benannte und unbenannte Schritte kombinieren. Schritte ohne run werden übersprungen.

Umgebungsvariablen festlegen

Um Umgebungsvariablen für nachfolgende Schritte festzulegen, schreiben Sie Zeilen im Format KEY=VALUE in die Datei $ENVRC (ähnlich wie bei GitHub Actions’ $GITHUB_ENV). Alle in $ENVRC geschriebenen Variablen werden für nachfolgende Schritte und die Devin-Sitzung automatisch exportiert.
initialize:
  - name: Configure environment
    run: |
      echo "NODE_ENV=production" >> $ENVRC
      echo "CI=true" >> $ENVRC

maintenance — jede Sitzung

Verwenden Sie maintenance, um Abhängigkeiten aktuell zu halten und Konfigurationsdateien für Anmeldedaten zu schreiben. Es wird während des Builds (nach initialize) und zu Beginn jeder Sitzung, nach dem Abrufen des neuesten Codestands, ausgeführt. Da es bei jedem Sitzungsstart ausgeführt wird, sollten Befehle schnell und inkrementell sein.
maintenance: |
  npm install
  pip install -r requirements.txt
Verwenden Sie npm install statt npm ci. npm ci löscht node_modules und installiert bei jedem Durchlauf alles von Grund auf neu. npm install führt dagegen eine inkrementelle Aktualisierung durch, die deutlich schneller ist, wenn sich die Abhängigkeiten nicht geändert haben.

Konfiguration von Anmeldedaten

Jeder Schritt, der Secrets in Konfigurationsdateien (.npmrc, settings.xml, pip.conf) schreibt, gehört in maintenance, nicht in initialize. Dadurch bleiben die Anmeldedaten zu Beginn jeder Sitzung aktuell.
maintenance:
  - name: Install dependencies
    run: npm install
  - name: Configure private registry
    run: npm config set //registry.npmjs.org/:_authToken $NPM_TOKEN

knowledge — umgebungsspezifische Hinweise (optional)

Verwenden Sie knowledge für kleine Einrichtungsdetails, die Devin benötigt, um die gerade erstellte Environment tatsächlich zu nutzen — zum Beispiel den Lint-Befehl, den Testbefehl oder wie der Dev-Server gestartet wird.
Dies ist nicht dasselbe wie die zentrale Funktion Knowledge. Für die meisten Dinge, an die Devin sich erinnern soll — Architektur, Konventionen, Fallstricke, Team-Workflows — verwenden Sie die eigenständige Knowledge-Funktion. Sie hat umfassendere Auslöser, lässt sich leichter bearbeiten und ist der richtige Ort für allgemeinen Projektkontext.Verwenden Sie den Abschnitt knowledge in environment.yaml nur für kurze Hinweise, die direkt mit der Einrichtung der Environment in dieser Datei verknüpft sind (z. B. “der Lint-Befehl ist npm run lint”). Dieser Abschnitt ist optional, und die meisten Environments benötigen ihn nicht.
Einträge sind Referenzhinweise — sie werden nicht ausgeführt. Halten Sie sie kurz:
knowledge:
  - name: lint
    contents: |
      Run `npm run lint` to check for errors.
      Run `npm run lint:fix` to auto-fix.
  - name: test
    contents: |
      Run `npm test` for the full suite.
      Run `npm test -- --watch` during development.
  - name: startup
    contents: |
      Run `npm run dev` to start the dev server on port 3000.

Konfigurationsebenen

Devin unterstützt drei Konfigurationsebenen. Die Befehle jeder Ebene sind streng additiv — sie werden während der Builds nacheinander ausgeführt, und niedrigere Ebenen können nicht überschreiben oder ändern, was höhere Ebenen konfigurieren.
EbeneWo konfiguriert wirdWas hier hingehörtBeispiele
Kontoweit (Enterprise)Enterprise Settings > EnvironmentInfrastruktur, die alle orgs benötigenCA-Zertifikate, Unternehmens-Proxy, VPN, DNS
OrgSettings > Environment > Organization-wide setupTools und Konfiguration, die in allen Repos gemeinsam genutzt werdenLaufzeitumgebungen (pnpm, uv), Docker-Authentifizierung, gemeinsam genutzte CLI-Tools
Repo-spezifischSettings > Environment > [repo]Projektspezifische Einrichtung und Knowledgenpm install, Lint-/Test-/Build-Befehle, Architekturhinweise
So entscheiden Sie, was wohin gehört:
  • Wenn jede org in Ihrem Enterprise es benötigt → kontoweit
  • Wenn jedes Repo in Ihrer org es benötigt → Org
  • Wenn es nur ein Repo benötigt → repo-specific
Enterprise-Nutzer: Ausführliche Hinweise zur Konfiguration auf Enterprise-Ebene — Berechtigungen, Build-Kaskadierung, Multi-org-Verwaltung und Enterprise-Migration — finden Sie auf der Seite Enterprise Environment Setup.

So funktioniert es

Das Maschinenabbild

Ihre Organisation verfügt über ein Maschinenabbild — einen Snapshot einer VM, in dem Ihre Tools, Repos und Abhängigkeiten vorinstalliert sind. Alle konfigurierten Repos werden in diesem einen Abbild geklont und eingerichtet. Jede Sitzung startet mit einer frischen Kopie.

So funktionieren Builds

Ein Build erstellt in dieser Reihenfolge ein neues Maschinenabbild:
1. Enterprise config (runs in ~):
   a. initialize
   b. maintenance
2. Org-wide config (runs in ~):
   a. initialize
   b. maintenance
3. Clone all repositories (up to 10 concurrent)
4. For each configured repo, in the order shown in Settings
   (runs in ~/repos/<repo-name>):
   a. initialize
   b. maintenance
5. Health check, then image is saved
Schichten sind additiv: repo-spezifische Befehle können Tools verwenden, die durch die Org- oder Enterprise-Konfiguration installiert wurden. Niedrigere Ebenen können nicht überschreiben, was auf einer höheren Ebene eingerichtet wurde. Builds dauern in der Regel 5–15 Minuten. Für einzelne Befehle gilt ein Timeout von 1 Stunde; für den gesamten Build gilt ein Timeout von 2 Stunden.

So funktionieren Sitzungen

Jede Sitzung startet mit einer frischen Kopie des Maschinenabbilds. Wenn die Sitzung endet, werden alle Änderungen verworfen. Beim Start einer Sitzung:
  1. Enterprise- und Org-maintenance-Läufe werden ausgeführt (in ~).
  2. Der neueste Code für die relevanten Repos wird abgerufen.
  3. Das maintenance dieses Repos wird erneut ausgeführt, um Änderungen an Abhängigkeiten seit dem letzten Build zu berücksichtigen.
  4. Die knowledge-Einträge dieses Repos werden in Devins Kontext geladen.
Knowledge gilt pro Repo. Wenn Sie 5 Repos konfiguriert haben, sieht Devin nur die Knowledge-Einträge für das Repo, an dem es gerade arbeitet.

Build-Status

StatusBedeutung
ErfolgreichAlle Schritte wurden abgeschlossen. Das Maschinenabbild ist bereit.
TeilweiseEinige Repos sind fehlgeschlagen, aber der Kern-Build war erfolgreich. Sitzungen funktionieren, aber einige Repos sind möglicherweise nicht vollständig eingerichtet.
FehlgeschlagenDer Kern-Build ist fehlgeschlagen (z. B. Klonen fehlgeschlagen, Enterprise-/org-Einrichtung fehlgeschlagen).
AbgebrochenDurch einen neueren Build ersetzt.
ÜbersprungenEs wurden keine Konfigurationsänderungen erkannt.
Build schlägt fehl? Siehe Fehlerbehebung & FAQ für eine Schritt-für-Schritt-Anleitung zur Fehlerbehebung.

Repository-Status

In der Environment Settings-UI werden Repositorys in drei Zuständen angezeigt:
StatusBedeutung
KonfiguriertEnthält eine YAML-Konfiguration für initialize/maintenance/knowledge. Vollständig im Maschinenabbild eingerichtet.
EnthaltenIn das Maschinenabbild geklont, aber ohne benutzerdefinierte Konfiguration. Devin kann auf den Code zugreifen.
VerfügbarFür die org zugänglich, aber nicht zum Environment hinzugefügt. Nicht geklont.
Enthalten vs. konfiguriert: Ein „enthaltenes“ Repo wird geklont, damit Devin auf den Code zugreifen kann, hat aber keine benutzerdefinierten Setup-Befehle. Ein „konfiguriertes“ Repo hat explizite Anweisungen für initialize/maintenance/knowledge.

Was löst eine Neuerstellung aus?

Ein neuer Build wird ausgelöst, wenn:
  • Sie in Settings > Devin’s Environment eine Konfiguration speichern
  • Sie in Settings auf Rebuild klicken
  • Sie eine von Devin vorgeschlagene Umgebungsaktualisierung in Ihrer Timeline anwenden

Secrets

Verweisen Sie mit der Syntax $VARIABLE_NAME auf Secrets. Fügen Sie sie unter Settings > Secrets hinzu.
maintenance:
  - name: Configure private registry
    run: npm config set //registry.npmjs.org/:_authToken $NPM_TOKEN
Secrets sind während Builds und Sitzungen als Umgebungsvariablen verfügbar. Die Secrets-Datei wird entfernt, bevor das Maschinenabbild gespeichert wird — aber wenn ein Befehl während initialize einen Secret-Wert in eine Konfigurationsdatei ausgeschrieben hat, kann dieser ausgeschriebene Wert im Abbild erhalten bleiben. Schreiben Sie Anmeldedaten stattdessen immer in maintenance, wo sie in jeder Sitzung neu geladen werden. Weitere Informationen zur Verwaltung von Secrets finden Sie unter Secrets & Site-Cookies.

Repo-Patterns

Mehrere Repositories

Wenn Sie mehrere Repos konfigurieren, erhält jedes eine eigene YAML-Datei in Settings. Während eines Builds werden sie alle im selben Image eingerichtet — in separate Verzeichnisse geklont und Abhängigkeiten jeweils unabhängig installiert. Während einer Sitzung sind nur die Wartung und das Knowledge des aktiven Repos relevant. Was ist, wenn zwei Repos miteinander in Konflikt stehen? Die Befehle jedes Repos werden in seinem eigenen Verzeichnis ausgeführt, daher sind Abhängigkeitskonflikte selten. Wenn zwei Repos unterschiedliche Versionen eines globalen Tools installieren oder gemeinsame Dateien (wie ~/.bashrc) ändern, setzt sich die zuletzt ausgeführte Änderung durch. Lege Installationen gemeinsam genutzter Tools in die Org-Konfiguration, um das zu vermeiden.

Monorepos

In einem Monorepo erstellen Sie eine einzige YAML-Datei, die alle Unterprojekte abdeckt. Verwenden Sie Subshells, um Befehle in Unterverzeichnissen auszuführen, ohne das Arbeitsverzeichnis für nachfolgende Schritte zu ändern:
initialize:
  - name: Install pnpm
    run: npm install -g pnpm
  - name: Install uv
    run: curl -LsSf https://astral.sh/uv/install.sh | sh

maintenance:
  - name: Frontend deps
    run: (cd packages/frontend && pnpm install)
  - name: Backend deps
    run: (cd packages/backend && uv sync)
  - name: Shared library
    run: (cd packages/shared && pnpm install)

knowledge:
  - name: structure
    contents: |
      Monorepo with three packages:
      - `packages/frontend` — React app (TypeScript, pnpm)
      - `packages/backend` — Python API (FastAPI, uv)
      - `packages/shared` — Shared TypeScript utilities
Die Klammern (cd ... && ...) sind wichtig — sie führen den Befehl in einer Subshell aus, sodass das Arbeitsverzeichnis für den nächsten Schritt zurückgesetzt wird. Wann Sie eine Multi-Repo- bzw. Monorepo-Konfiguration verwenden sollten: Befindet sich der Code in einem einzigen Git-Repository, verwenden Sie eine YAML mit Subshells. Ist er auf mehrere Git-Repositories verteilt, konfigurieren Sie jedes Repo separat in Settings.

Nächste Schritte

YAML-Referenz

Referenztabellen für Felder, Ausführungsdetails, vorinstallierte Tools und Glossar.

Konfigurationsbeispiele

Beispiele zum Kopieren für Node.js, Python, Java, Go, Monorepos, Enterprise-Patterns und mehr.

Fehlerbehebung & FAQ

Build-Fehler beheben, von der interaktiven Einrichtung migrieren und Antworten auf häufige Fragen finden.

Einrichtung der Enterprise-Umgebung

Berechtigungen, kaskadierende Builds, Verwaltung mehrerer orgs und Enterprise-Migration.