Eine Pipeline-Vorlage erstellen
Pipeline-Vorlagen entstehen in den Einstellungen des Arbeitsbereichs. Der Eintrag Pipelines in der Seitenleiste des Arbeitsbereichs ist die Warteschlange der Läufe. Die Vorlagenliste liegt woanders, und diese Ansicht hat keine Aktion „Vorlage erstellen“.
Was jede Schrittart, jeder Body-Schlüssel und jedes Konfigurationsfeld bedeutet, steht in den Pipeline-Schrittarten.
Vorlage anlegen
Abschnitt betitelt „Vorlage anlegen“- Geh zu Einstellungen → Arbeitsbereich → Pipeline-Vorlagen
(
/workspaces/<workspace-id>/settings/pipelines). - Drücke Neue Vorlage.
Einen Dialog für die ID gibt es nicht. Der Editor öffnet sich sofort auf einem
angelegten Gerüst namens Neue Pipeline, mit einer automatisch vergebenen ID
(pipeline_1, dann pipeline_2, …). Klicke auf den Titel in der Kopfzeile, um
ihn umzubenennen.
Die Zeichenfläche ist nicht leer: ein Eingangsknoten Trigger, ein Prompt-Agenten-Knoten mit der Bezeichnung Step und eine Endmarke, die den Lauf abschließt. Die Endmarke wird nicht gezeichnet. Der Editor hängt dieses versteckte Ende an jede erreichbare Senke, sodass Arbeit, die du hinter Step anhängst, trotzdem läuft.
Knoten hinzufügen
Abschnitt betitelt „Knoten hinzufügen“Die Seitenleiste Knotenbibliothek sitzt fest links im Editor. Filtere sie über das Feld Knoten suchen und ziehe einen Eintrag auf die Zeichenfläche. Der Knoten landet dort, wo du ihn loslässt, ohne eingehende Verbindung.
| Palettenknoten | Schrittart | Wirkung |
|---|---|---|
| Bash script | listen | Führt ein Shell-Skript mit Ersetzung von {{state}} aus; es wird kein Agent losgeschickt |
| Open conversation | listen | Öffnet den einen sichtbaren Bereich des Laufs und seinen Checkout; Agentenknoten betreten diesen Bereich |
| Clone PR branch | listen | Ermittelt den Head-Branch des PR über gh pr view und klont ihn ins Laufverzeichnis |
| Post PR comment | listen | Schreibt die zusammengeführten Befunde als GitHub-Review-Kommentar an den PR |
| Reviewer (prompt) | listen | Schickt einen spezialisierten Reviewer-Agenten los; hält an, bis der Agent sein Ergebnis einreicht |
| Consolidate (join) | join | Wartet auf mehrere vorgelagerte Zweige und bittet dann einen Agenten, ihre Ausgaben zusammenzuführen |
| Custom prompt | listen | Allgemeiner, promptgesteuerter Knoten über den Body promptAgent |
| Post to space | listen | Sendet eine Nachricht an einen Bereich |
| Condition / switch (router) | router | Verzweigt den Ablauf nach einem Zustandswert |
| If file exists (router) | router | Routet "true", wenn ein Pfad unter dem Klon existiert, sonst "false" |
| Any file exists (OR router) | router | Routet "true", wenn irgendein aufgeführter Pfad existiert |
| All conditions (AND router) | router | Routet "true" nur, wenn jeder aufgeführte Pfad existiert |
| Team dispatch | listen | Schickt ein ganzes Team los und hält an, bis es fertig ist |
| Approval gate | listen | Hält für eine Freigabeentscheidung an |
| For each (map) | forEach | Rendert einen Prompt je Eintrag und schickt den Agenten dann einmal los, mit diesen Prompts aneinandergereiht |
| Call sub-pipeline | listen | Führt eine andere Vorlage als verschachtelten Schritt aus |
| Clean up worktrees | listen | Entfernt veraltete isolierte Worktrees; deterministisch, es wird kein Agent losgeschickt |
Die Bibliothek gruppiert sie unter Ablauf und Logik, PR-Review, Agenten, Nachrichten und Code. Eine Gruppe Demo gibt es nicht.
Knoten verbinden
Abschnitt betitelt „Knoten verbinden“Jeder Arbeitsknoten hat an der rechten Kante einen runden Ausgabeport. Ziehe
von diesem Port auf einen anderen Knoten, um sie zu verbinden. Startauslöser
funktionieren genauso: jeder hat seinen eigenen Port, sodass eine Leitung von
Zeitplan nicht zugleich von Manueller Lauf ausgeht. Drücke Schritt
hinzufügen (+) direkt hinter einem Knoten, um danach einen Typ einzufügen.
Fahre den Mittelpunkt einer bestehenden Kante an und drücke ×, um sie zu
trennen.
Verbindungen bearbeitest du auch am Knoten, der sie empfängt:
- Wähle den nachgelagerten Knoten. Sein Konfigurationspanel öffnet sich rechts.
- Scrolle zu Auslöser von und tippe den Chip jedes vorgelagerten Knotens an, auf den dieser hören soll. Ein Tipp auf einen ausgewählten Chip entfernt die Verbindung.
- Ist ein vorgelagerter Knoten ein Router, erscheint unter den Chips ein Block
Routing-Schlüssel mit einem Feld Routing-Schlüssel von <Knoten>
je Router-Kante. Trag den Schlüssel ein, auf den diese Kante feuert:
trueoderfalsebei den Datei-existiert-Routern, oder den Fallnamen bei einer Verzweigung.
Jeder Auslöserknoten ist ein Einstiegspunkt. Ein Knoten darf auf mehrere Vorgänger hören (fan-in) und mehrere Nachfolger speisen (fan-out), und der Graph muss azyklisch bleiben. Der Editor hindert dich nicht daran, einen Zyklus zu verdrahten, also prüfe deine Arbeit.
Die Endmarke ist aus der Zeichenfläche herausgefiltert und lässt sich nicht auswählen. Der Editor verdrahtet sie bei jeder Änderung des Graphen neu auf jede erreichbare Senke, sodass Arbeit hinter dem angelegten Step trotzdem läuft. Ein leerer Graph (Auslöser ohne nachfolgende Arbeit) führt den Auslöser selbst auf, damit ein Lauf sofort endet.
Einen Knoten konfigurieren
Abschnitt betitelt „Einen Knoten konfigurieren“Wähle einen Knoten, um sein Konfigurationspanel zu öffnen. Welche Felder erscheinen, hängt vom Body des Knotens ab.
Jeder Knoten hat Bezeichnung, Eingabeschlüssel (kommagetrennt) (Zustandsschlüssel, die zur Ausführung gelesen werden) und unter Erweitert die Felder Reduzierer, Zeitlimit (ms), Wiederholungsversuche, Fortfahren, wenn dieser Schritt fehlschlägt und Ausgabeschema (JSON). Knoten der Arten listen und join können ihre Art zwischen den beiden umschalten.
Open conversation
Abschnitt betitelt „Open conversation“Ergänzt eine Auswahl Zu klonende Repositories (welche Repos des Arbeitsbereichs ausgecheckt werden; leer heißt keines), ein Feld Name des Raums und das Kontrollkästchen Darin eine Unterhaltung öffnen. Ist das Kontrollkästchen aktiv, benennt Name der Unterhaltung den Verlauf, mit dem der Bereich sich öffnet. Agentenknoten betreten diesen Bereich und öffnen keinen eigenen.
Prompt-Agent
Abschnitt betitelt „Prompt-Agent“Ergänzt Agent (welcher Agent losgeschickt wird), Prompt-Vorlage (mit
{{key}} verweist du auf Eingaben oder Ausgaben vorgelagerter Knoten) und
Ausgabeschlüssel.
Zeitlimit (ms) ist in Millisekunden, nicht in Sekunden. 900000 sind
15 Minuten. 900 gibt dem Schritt 0,9 Sekunden.
Der Unterhaltungsmodus, in dem ein Prompt-Agenten-Knoten läuft, hat am
Agentenknoten kein Feld im Editor. Er steckt in extras['mode'] (chat,
plan oder review) am Knoten Open conversation, der den Bereich angelegt
hat (Vorgabe review). Am Agentenschritt gesetzt, wird er ignoriert. Der
Schlüssel wird exakt verglichen: jede andere Schreibweise wird still ignoriert.
Bash script
Abschnitt betitelt „Bash script“Ergänzt Bash-Skript. Felder für das Arbeitsverzeichnis oder die Umgebung gibt es nicht, weil beides fest ist:
- Jeder Bash-Schritt eines Laufs teilt sich das cwd
<cc_root>/pipelines/<runId>/. GITHUB_TOKENkommt aus dem Zugangsdatenspeicher, deshalb funktionierenghundgit clone https://x-access-token:$GITHUB_TOKEN@…ohne weitere Einrichtung.- Das Skript wird als das ausführbare Programm
bashgestartet, deshalb mussbashauf demPATHdes Server-Hosts liegen. Das gilt es unter Windows zu bedenken.
Ein Router wertet eine Bedingung aus und liefert einen Routing-Schlüssel. Die Engine feuert nur die nachgelagerte Kante, deren Routing-Schlüssel passt, und markiert die anderen Zweige als übersprungen.
Wählst du einen Router, ersetzt der Bedingungseditor das Feld Ausgabeschlüssel. Nimm einen der vier Modi:
- Datei(en) vorhanden — beliebige — routet
"true", wenn irgendein aufgeführter Pfad existiert. - Dateien vorhanden — alle — routet
"true"nur, wenn jeder aufgeführte Pfad existiert. - Vergleich — vergleicht einen Zustandswert mit einem Literal.
- Verzweigung — routet nach dem Wert eines Zustandsschlüssels, mit einem Standardfall.
Setze danach die passenden Routing-Schlüssel an den ausgehenden Kanten (siehe Knoten verbinden).
Boolesche Gruppen and / or / not unterstützt der Body, aus diesem
Formular lassen sie sich aber nicht anlegen. Dafür brauchst du einen von Hand
geschriebenen Prädikatbaum unter extras.predicate. Das vollständige
Vokabular der Prädikate und Operatoren steht in den
Pipeline-Schrittarten.
Keine eigene Konfiguration: er wartet auf alle seine vorgelagerten Schritte.
Approval gate
Abschnitt betitelt „Approval gate“Das Tor schickt den Genehmiger-Agenten mit dem Prompt des Tors in eine
versteckte Unterhaltung und hält an. Der Genehmiger holt deine Entscheidung in
der Unterhaltung ein und reicht sie mit submit_output als
{ "decision": "approved" | "rejected", "reason": "..." } ein. Die
Entscheidung landet unter dem Ausgabeschlüssel (Vorgabe approval_decision),
sodass ein nachgelagerter Router im Modus Verzweigung darauf verzweigen kann.
Setze Agent auf den Genehmiger und Prompt-Vorlage auf die Frage des
Tors. Das Tor löst sich über submit_output als { "decision": "approved" | "rejected", "reason": "..." } auf. Knoten Reviewer (prompt) reichen auf demselben Weg
ein.
Team dispatch
Abschnitt betitelt „Team dispatch“Ergänzt Team-ID und Verteilungsmodus. Die Auswahl bietet genau zwei Modi:
allParallel— eine Aufgabe je Mitglied, hält an, bis alle fertig sind.manager— schickt die Leitung los, die delegiert.
Jeder andere gespeicherte Wert verhält sich wie allParallel. Setze
Reduzierer auf append, um das Ergebnis jedes Mitglieds als Liste unter
dem Ausgabeschlüssel zu sammeln.
For each and Call sub-pipeline
Abschnitt betitelt „For each and Call sub-pipeline“For each bildet standardmäßig über den Zustandsschlüssel items ab
(extras.iterableKey / extras.itemKey am Knoten). Es rendert seinen Prompt
einmal je Eintrag ({{item}} als Vorgabe) und schickt den Agenten einmal
los, mit diesen Prompts aneinandergereiht. Eine leere Sammlung endet sofort mit
einer leeren Liste. Es ist kein paralleler Versand je Eintrag.
Call sub-pipeline hält an, bis der Kindlauf einen Endzustand erreicht, und
legt dann den Endzustand des Kindes unter dem Ausgabeschlüssel ab (Vorgabe
subflow_result). Zeige mit extras.templateId auf ein Kind. Eine Vorlage
kann sich nicht selbst aufrufen. Ein fehlgeschlagener oder abgebrochener
Kindlauf lässt den Elternschritt fehlschlagen, und der folgt dann der
Wiederholungs- und Fortsetzen-Regel dieses Schritts.
Eingaben deklarieren und manuelle Läufe zulassen
Abschnitt betitelt „Eingaben deklarieren und manuelle Läufe zulassen“Beides liegt hinter Manuelle Ausführung in der Kopfzeile des Editors.
- Drücke Manuelle Ausführung.
- Schalte Manuelle Ausführung zulassen ein. Dieser Schalter speichert
sofort: er legt die Trigger-Zeile
manualan oder löscht sie, und genau dadurch erscheint die Vorlage auf der Ausführungsseite. - Setze Max. parallele Läufe, wenn du eine Obergrenze willst (leer lassen
heißt unbegrenzt). Weitere Starts warten im Zustand
queued, bis ein Platz frei wird. - Drücke Eingabe hinzufügen für jedes Formularfeld, das ein manueller Lauf abfragen soll:
| Feld | Beschreibung |
|---|---|
| Schlüssel | Zustandsschlüssel, unter dem der Wert liegt; verweise darauf mit {{key}} |
| Bezeichnung | Anzeigetext (Vorgabe ist der Schlüssel) |
| Typ | Text, Mehrzeiliger Text, Zahl, Schalter, Auswahl, Repository |
| Optionen (durch Kommas getrennt) | Kommagetrennte Auswahlmöglichkeiten, nur bei Auswahl |
| Standardwert | Vorausgefüllter Wert |
| Platzhalter | Hinweistext im leeren Feld |
| Hilfetext | Hilfetext unter dem Feld |
| Erforderlich | Ob das Formular des Laufs bei einem leeren Wert blockiert |
Eine Eingabe Repository zeigt eine Auswahl über die Repos des
Arbeitsbereichs und schreibt repo_id, repo_local_path, repo_full_name
und, wenn das Repo ein GitHub-Remote hat, repo_owner und repo_name in die
Nutzlast des Laufs.
- Drücke Speichern im Dialog. Änderungen an den Eingaben gehen in den Entwurf ein und bleiben erhalten, wenn du die Vorlage speicherst.
Speichern und aktivieren
Abschnitt betitelt „Speichern und aktivieren“- Drücke Speichern in der Kopfzeile des Editors. Bis dahin zeigt die Kopfzeile „Nicht gespeicherte Änderungen“.
- Geh zurück zu Einstellungen → Arbeitsbereich → Pipeline-Vorlagen und prüfe, dass der Schalter in der Zeile der Vorlage an ist. Die Engine startet eine deaktivierte Vorlage nicht, und eine deaktivierte Vorlage erscheint nie auf der Ausführungsseite.
- Damit sie automatisch startet, ziehe einen Auslöser aus der Knotenbibliothek auf die Zeichenfläche. Siehe Pipeline-Trigger einrichten.
Verwandte Anleitungen
Abschnitt betitelt „Verwandte Anleitungen“- Eine Pipeline manuell ausführen
- Pipeline-Trigger einrichten
- Pipeline-Läufe überwachen
- Pipeline-Schrittarten