Skip to main content
Dies ist die vollständige Feldreferenz für Blueprints. Eine Einführung in Blueprints und ihre Rolle in Devins Umgebung finden Sie unter Deklarative Umgebungskonfiguration.
Ein Blueprint definiert, wie Devins Umgebung konfiguriert wird: welche Tools installiert werden, wie Abhängigkeiten aktuell gehalten werden und welche Befehle Devin kennen soll.

Überblick

Ein Blueprint besteht aus drei grundlegenden Abschnitten auf oberster Ebene sowie aus einem Abschnitt post-build für Blueprints auf Org- und Enterprise-Ebene und optional aus einem Abschnitt clone für Blueprints auf Repo-Ebene:
Alle Abschnitte sind optional. Sie können jede beliebige Kombination verwenden. initialize wird bei vollständigen Builds und für Workspaces ausgeführt, die von Grund auf neu aufgebaut werden. Die Ergebnisse werden im Snapshot gespeichert. In einem differenziellen Build überspringen vererbte Workspaces initialize, ziehen den neuesten Code und führen nur maintenance aus. Schreiben Sie maintenance so, dass es in sich abgeschlossen ist und unabhängig auf dem vorhandenen Snapshot ausgeführt werden kann, ohne dass initialize unmittelbar zuvor ausgeführt werden muss oder auf Umgebungsvariablen angewiesen ist, die initialize zuvor in $ENVRC geschrieben hat. Zu Beginn jeder Sitzung werden maintenance-Befehle nicht automatisch ausgeführt — stattdessen werden sie dem Agenten als Kontext angezeigt, damit er weiß, welche Befehle für Abhängigkeiten bei Bedarf ausgeführt werden müssen (z. B. nach dem Abrufen des neuesten Codes). Die Befehle sollten weiterhin schnell und inkrementell sein. Builds werden automatisch ausgeführt, wenn sich Ihr Blueprint ändert, und außerdem regelmäßig (ca. alle 24 Stunden).

initialize

Verwende initialize, um Tools und Laufzeitumgebungen zu installieren, die nicht vom konkreten Zustand deines Codes abhängen: Laufzeitumgebungen für Programmiersprachen, Systempakete, globale CLIs.

Einfache Form

Für einfache Shell-Befehle verwenden Sie einen Blockskalar:

Strukturierte Form

Verwenden Sie für benannte Schritte, Umgebungsvariablen oder GitHub Actions eine Liste:
Beide Formen können kombiniert werden. Die einfache Form entspricht einem einzelnen Schritt mit run.

Wann initialize statt maintenance verwenden

Beide Abschnitte werden bei vollständigen Builds ausgeführt. Bei differenziellen Builds überspringen vererbte Workspaces initialize und führen nach dem Abrufen des neuesten Codes nur maintenance aus. Tools und Laufzeitumgebungen für Programmiersprachen gehören in initialize; Abhängigkeitsbefehle, die sich an den Lock-Dateien Ihres Codes orientieren, gehören in maintenance.

maintenance

Verwenden Sie maintenance für die Installation von Abhängigkeiten und andere Befehle, die nach dem Klonen Ihres Codes ausgeführt werden sollen. Diese Befehle werden während Builds ausgeführt und dem Agenten zu Beginn der Sitzung angezeigt, damit er sie erneut ausführen kann, wenn sich Abhängigkeiten geändert haben. Hierhin gehören npm install, pip install, uv sync und ähnliche Befehle.
Oder in strukturierter Form:
Für Blueprints auf Repo-Ebene werden maintenance-Befehle im Root-Verzeichnis des Repos ausgeführt. Für Blueprints auf Org-Ebene werden sie im Home-Verzeichnis (~) ausgeführt.

knowledge

Der Abschnitt knowledge wird nicht ausgeführt. Er enthält Referenzinformationen, die Devin bei der Arbeit an Ihrem Projekt verwendet. Hier geben Sie Devin die richtigen Befehle für Linting, Tests, Builds und andere projektspezifische Workflows an.
Jeder Knowledge-Eintrag hat: Das Feld name ist eine Bezeichnung. Üblicherweise sind lint, test und build die Standardnamen. Bei der Überprüfung seiner Arbeit greift Devin auf diese zurück. Sie können beliebige zusätzliche Knowledge-Einträge mit benutzerdefinierten Namen hinzufügen:

post-build

Der Abschnitt post-build ist nur in Blueprints auf Organisations- und Enterprise-Ebene verfügbar (in Blueprints auf Repo-Ebene wird er nicht unterstützt). Seine Schritte werden während des Builds ausgeführt, nachdem alle Repositorys geklont wurden und ihre Schritte initialize und maintenance abgeschlossen sind, aber bevor die Integritätsprüfung durchgeführt und das Snapshot-Image erstellt wird. Damit ist dies der richtige Ort für Repository-übergreifende Validierungen und Integritätsprüfungen, die die vollständig aufgebaute Umgebung benötigen. Da er erst spät im Build ausgeführt wird, wenn die gesamte Umgebung bereitsteht, kann ein post-build-Schritt jedes geklonte Repo und jedes Tool sehen, das von den Enterprise-, Org- und Repo-Blueprints installiert wurde.
Oder in strukturierter Form:
post-build-Schritte lassen den Build bei einem Exit-Code ungleich null fehlschlagen. Wenn ein post-build-Schritt mit einem Exit-Code ungleich null beendet wird, wird der Build als fehlgeschlagen markiert und es wird kein Snapshot-Image erzeugt. Verwenden Sie dies, um Snapshots an Integritätsprüfungen zu knüpfen — stellen Sie aber sicher, dass die Befehle zuverlässig sind, damit ein instabiler Check Ihre Builds nicht blockiert.
post-build-Schritte verwenden dieselben Schritttypen wie initialize und maintenance (Shell-run-Befehle und GitHub-Actions-uses) und werden aus dem Home-Verzeichnis (~) ausgeführt.

clone

Für Blueprints auf Repo-Ebene überschreibt der optionale Abschnitt clone die Standardwerte, die Devin verwendet, wenn das Repository in den Snapshot geklont wird. Jedes Feld ist optional und greift andernfalls auf einen sinnvollen Standard zurück, der das aktuelle Verhalten beibehält.
clone gilt nur für auf Repo-Ebene Blueprints — es steuert, wie das jeweilige Repo in den Snapshot geklont wird. In Blueprints auf Org-Ebene oder enterprise-level hat es keine Wirkung.

Schritttypen

Jeder Schritt in initialize, maintenance oder post-build gehört zu einem von zwei Typen: Shell-Befehle (run) oder GitHub Actions (uses).

Shell-Befehle (run)

Führen Sie beliebige Shell-Befehle in Bash aus:
Ausführungsdetails:
  • Befehle werden in bash ausgeführt. Wenn in einem mehrzeiligen Skript ein Befehl fehlschlägt, wird der gesamte Schritt sofort abgebrochen.
  • Blueprints auf Org-Ebene werden im Home-Verzeichnis (~) ausgeführt.
  • Blueprints auf Repo-Ebene werden im Root-Verzeichnis des geklonten Repositorys ausgeführt.
  • Jeder Schritt hat ein Timeout von 1 Stunde.
  • Secrets sind automatisch als Umgebungsvariablen verfügbar.

GitHub Actions (uses)

Führen Sie Node.js-basierte GitHub Actions direkt in Ihrem Blueprint aus:
Format der Action-Referenz:
Das Präfix github.com/ und das Suffix @<ref> sind beide erforderlich. Die Referenz ist in der Regel ein Versions-Tag wie v5. Häufig verwendete Actions:
Unterstützt werden nur Node.js-basierte GitHub Actions. Composite Actions und Docker-basierte Actions werden nicht unterstützt.
So funktionieren with-Werte: Werte, die über with übergeben werden, werden der Action als Eingaben übergeben und folgen dabei denselben Konventionen wie in GitHub-Actions-Workflows. Alle Werte werden in Zeichenfolgen umgewandelt.
Wie Aktionen Änderungen weiterreichen: Aktionen können die Umgebung für nachfolgende Schritte ändern. Zum Beispiel fügt setup-python die Python-Binärdatei zu PATH hinzu, sodass sie in allen späteren Schritten und in maintenance verfügbar bleibt.

run vs. uses: wann Sie was verwenden sollten

In der Praxis verwenden die meisten Konfigurationen uses für Laufzeitumgebungen von Programmiersprachen und run für alles andere.

Umgebungsvariablen und Secrets

Umgebungsvariablen pro Schritt

Jeder Schritt kann mit dem Feld env zusätzliche Umgebungsvariablen definieren:
Diese gelten nur für den jeweiligen Schritt und bleiben in nachfolgenden Schritten nicht erhalten.

Schrittübergreifende Umgebungsvariablen ($ENVRC)

Um Umgebungsvariablen über mehrere Schritte hinweg weiterzugeben, schreiben Sie sie in die Datei $ENVRC:
In $ENVRC geschriebene Variablen werden automatisch exportiert und stehen in allen nachfolgenden Schritten sowie in der Devin-Sitzung zur Verfügung, die durch den aktuellen Build erzeugt wird. Das funktioniert ähnlich wie $GITHUB_ENV in GitHub Actions. Dies gilt auch für PATH. Wenn Sie ein Tool in einem nicht standardmäßigen Verzeichnis installieren (alles außerhalb von /usr/bin oder /usr/local/bin), fügen Sie den Pfad zu $ENVRC hinzu, damit nachfolgende Schritte und Blueprints auf Repo-Ebene die Binärdatei finden können:
Ein einfaches export PATH=... innerhalb eines run:-Blocks gilt nur für die Shell dieses Schritts. Jeder Schritt startet einen neuen Shell-Prozess, sodass PATH-Änderungen, die nicht in $ENVRC geschrieben werden, verloren gehen.
uses:-Actions (z. B. actions/setup-node) übernehmen ihre PATH- Ergänzungen automatisch in $ENVRC — Sie müssen dies nur bei run:-Schritten manuell tun.
$ENVRC wird zu Beginn jedes Builds zurückgesetzt, einschließlich differenzieller Builds. Werte, die während eines Builds geschrieben werden, sind im nächsten Build nicht verfügbar. Insbesondere führt ein vererbter Workspace nur maintenance aus, sodass er sich nicht auf PATH oder andere Variablen verlassen kann, die initialize im übergeordneten Build in $ENVRC geschrieben hat. Konfigurieren Sie alle von maintenance benötigten Umgebungen innerhalb von maintenance selbst.

Secrets

In der Devin-Benutzeroberfläche konfigurierte Secrets (über den Secrets-Tab in jedem Blueprint-Editor) werden automatisch als Umgebungsvariablen eingefügt. Sie müssen sie nicht in Ihrem Blueprint deklarieren. Verweisen Sie einfach per Namen darauf (z. B. $MY_SECRET). Secrets werden vor jedem Schritt während Builds eingefügt und zu Beginn jeder Sitzung erneut eingefügt. Aus dem Snapshot-Image selbst werden sie entfernt, sodass Zugangsdaten niemals in gespeicherte Maschinenabbilder eingebettet sind.
  • Organisations-Secrets: Als Umgebungsvariablen in jedem Schritt aller Blueprints in der org verfügbar. Konfigurieren Sie diese im Secrets-Tab des Editors für das organisationsweite Blueprint.
  • Enterprise-Secrets: Werden mit org-Secrets zusammengeführt (bei Namenskonflikten haben org-Secrets Vorrang). In allen orgs im Enterprise verfügbar.
  • Repository-Secrets: Werden in eine Repo-spezifische Datei unter /run/repo_secrets/{owner/repo}/.env.secrets geschrieben. Während Builds werden Repo-Secrets automatisch geladen, bevor die Blueprint-Schritte dieses Repos ausgeführt werden. Während Sitzungen lädt Devin sie, wenn im Repo gearbeitet wird. Konfigurieren Sie diese im Secrets-Tab des Blueprint-Editors des Repositorys.
Nur-Build-Secrets: Secrets, die als “build only” markiert sind, sind während Snapshot-Builds verfügbar, werden aber entfernt, bevor der Snapshot gespeichert wird. Verwenden Sie diese für Zugangsdaten, die nur während des Builds benötigt werden (z. B. zum Herunterladen privater Artefakte während initialize).
maintenance wird während Builds ausgeführt. Zu Beginn einer Sitzung werden maintenance-Befehle dem Agent angezeigt (nicht automatisch ausgeführt), sodass der Agent sie bei Bedarf erneut ausführen kann. Wenn ein maintenance-Schritt Secrets in Konfigurationsdateien schreibt (z. B. ~/.m2/settings.xml, ~/.npmrc), werden diese Dateien in den Snapshot eingebettet. Platzieren Sie Schritte, die Zugangsdaten schreiben, in maintenance (nicht in initialize), damit sie während periodischer Builds aktualisiert werden. Beachten Sie aber, dass die geschriebenen Dateien im Image erhalten bleiben. Für maximale Sicherheit sollten Sie Umgebungsvariablen oder $ENVRC verwenden, anstatt Zugangsdaten auf den Datenträger zu schreiben.

Dateianhänge

Sie können Dateien (wie .npmrc, settings.xml oder Konfigurationsdateien) über den Blueprint-Editor hochladen. Hochgeladene Dateien werden unter ~/.files/ abgelegt, und es wird eine Umgebungsvariable gesetzt, die auf den Pfad der jeweiligen Datei verweist:
Der Variablenname wird vom Dateinamen abgeleitet: in Großbuchstaben, wobei nicht alphanumerische Zeichen durch Unterstriche ersetzt und mit dem Präfix FILE_ versehen werden. Verwenden Sie Dateianhänge in Ihren Blueprint-Schritten:

Git-gestützte Blueprints

Sie können Blueprints als .devin/blueprint.yaml-Dateien direkt in Ihrem Repository speichern und anschließend über die API oder die UI synchronisieren. Weitere Informationen und Anweisungen zum Setup finden Sie unter Git-gestützte Blueprints.

Vollständiges Beispiel

Informationen dazu, wie Blueprints über verschiedene Ebenen hinweg zusammenwirken (enterprise → org → repo), zu Build-Status, Repository-Zuständen und dazu, was einen erneuten Build auslöst, finden Sie unter Builds und Sitzungen auf der Seite zur deklarativen Konfiguration.

Organisationsweites Blueprint

Gemeinsam genutzte Tools, die jedes Repo in der Org benötigt. Dieses Blueprint wird zuerst ausgeführt (nach einem etwaigen Enterprise-Blueprint), und zwar im Home-Verzeichnis.

Blueprint auf Repo-Ebene

Projektspezifische Einrichtung für ein Node.js- und Python-Monorepo. Sie wird nach dem organisationsweiten Blueprint im Repository-Verzeichnis ausgeführt.