Skip to Content
DevOpsCLITemplate-Pipes

Template-Pipes

Die CLI ermöglicht es, Kommandos miteinander zu verketten. Dazu wird die Ausgabe eines Kommandos als Eingabe an ein nachfolgendes Kommando weitergeleitet. Diese Verkettung wird als Piping bezeichnet und nutzt den Pipe-Operator (|) der Shell.

Mit Template-Pipes können Sie flexibel auf beliebige Felder der JSON-Ausgabe zugreifen und diese an nachfolgende Kommandos weitergeben.

Template-Pipes erfordern CLI Version 4.2.0 oder höher und eine aktive Verbindung zu einer Engine (pc engine login).

Grundlagen

Standard-Piping

Im Standard-Verfahren erkennt die CLI automatisch, welche IDs aus der Ausgabe eines Kommandos extrahiert werden sollen:

pc engine lsi --filter-by-state error | pc engine retry-process-instance

Hierbei erkennt retry-process-instance automatisch, dass die Pipe-Eingabe vom Typ process-instances stammt, und extrahiert die processInstanceId aller Ergebnisse. Dieses Verfahren funktioniert weiterhin und ist vollständig rückwärtskompatibel.

Template-Pipes

Template-Pipes ermöglichen den gezielten Zugriff auf beliebige Felder der JSON-Ausgabe:

{{.feldName}}

Der Feldname wird mit einem Punkt (.) eingeleitet und in doppelte geschweifte Klammern eingeschlossen.

pc engine lsi --filter-by-state running | pc engine stop {{.processInstanceId}}

In diesem Beispiel wird {{.processInstanceId}} durch die tatsächliche processInstanceId jedes Ergebnisses ersetzt.

Syntax im Detail

Einfacher Feldzugriff

Greifen Sie auf ein Feld der obersten Ebene zu:

{{.processInstanceId}} {{.processModelId}} {{.correlationId}}

Verschachtelter Feldzugriff

Greifen Sie auf verschachtelte Felder zu, indem Sie die Feldnamen mit Punkten trennen:

pc engine lsi | pc engine show {{.correlation.correlationId}}

Mehrere Templates in einem Argument

Kombinieren Sie mehrere Templates innerhalb eines Arguments:

pc engine lsi | echo "{{.processModelId}}/{{.processInstanceId}}"

Template in Optionswerten

Templates können auch in den Werten von Optionen verwendet werden:

pc engine lsi --limit 5 | pc engine lsu --filter-by-correlation-id {{.correlationId}}

Verhalten bei mehreren Ergebnissen

Wenn die Ausgabe des vorangehenden Kommandos mehrere Ergebnisse enthält, wird das Template pro Ergebnis expandiert.

Beispiel

Angenommen, pc engine lsi --filter-by-state running liefert drei Ergebnisse:

{ "result_type": "process-instances", "result": [ { "processInstanceId": "abc-111", "processModelId": "Bestellung" }, { "processInstanceId": "abc-222", "processModelId": "Bestellung" }, { "processInstanceId": "abc-333", "processModelId": "Reklamation" } ] }

Der Befehl:

pc engine lsi --filter-by-state running | pc engine stop {{.processInstanceId}}

wird intern zu:

pc engine stop abc-111 abc-222 abc-333

Wenn das vorangehende Kommando keine Ergebnisse liefert (leeres result-Array), wird die Template-Position entfernt.

Praxisbeispiele

Alle laufenden Instanzen stoppen

pc engine lsi --filter-by-state running | pc engine stop {{.processInstanceId}}

Fehlgeschlagene Instanzen anzeigen

pc engine lsi --filter-by-state error | pc engine show {{.processInstanceId}}

Fehlgeschlagene Instanzen erneut versuchen

pc engine lsi --filter-by-state error | pc engine retry {{.processInstanceId}}

Deployen und direkt starten

pc engine deploy-files mein-prozess.bpmn | pc engine start {{.processModelId}}

User-Tasks nach Correlation filtern

pc engine lsi --limit 1 | pc engine lsu --filter-by-correlation-id {{.correlationId}}

Mehrere Modelle deployen und starten

pc engine deploy-files prozess-a.bpmn prozess-b.bpmn | pc engine start {{.processModelId}}

Verfügbare Felder je Kommando

Die verfügbaren Felder hängen vom vorangehenden Kommando ab.

list-process-instances

FeldTypBeschreibung
processInstanceIdstringEindeutige ID der Prozessinstanz
processModelIdstringID des Prozessmodells
processModelNamestringName des Prozessmodells
processDefinitionIdstringID der Prozessdefinition
correlationIdstringID der Correlation
statestringStatus: running, finished, error, terminated
createdAtstringErstellungszeitpunkt (ISO 8601)
finishedAtstringAbschlusszeitpunkt (ISO 8601)
durationInMillisecondsnumberLaufzeit in Millisekunden
ownerIdstringID des Besitzers
parentProcessInstanceIdstringID der übergeordneten Instanz (bei CallActivities)
startEventIdstringID des Start-Events
endEventIdstringID des End-Events
hashstringHash der Prozessdefinition
engineIdstringID der Engine
correlation.correlationIdstringCorrelation-ID (verschachtelter Zugriff)

list-process-models

FeldTypBeschreibung
idstringID des Prozessmodells
namestringName des Prozessmodells
startEventIdsarrayIDs der Start-Events

list-user-tasks

FeldTypBeschreibung
flowNodeInstanceIdstringEindeutige ID der FlowNode-Instanz
flowNodeNamestringName des User-Tasks
statestringStatus des User-Tasks
processModelIdstringID des zugehörigen Prozessmodells
processInstanceIdstringID der zugehörigen Prozessinstanz
correlationIdstringID der Correlation

deploy-files

FeldTypBeschreibung
successbooleanOb das Deployment erfolgreich war
filenamestringDateiname der deployten BPMN-Datei
processModelIdstringID des deployten Prozessmodells

start-process-model

FeldTypBeschreibung
successbooleanOb der Start erfolgreich war
processModelIdstringID des gestarteten Prozessmodells
startEventIdstringID des verwendeten Start-Events
processInstanceIdstringID der erzeugten Prozessinstanz
correlationIdstringID der Correlation

show-process-instance

Gleiche Felder wie list-process-instances, zusätzlich:

FeldTypBeschreibung
flowNodeInstancesarrayArray der FlowNode-Instanzen mit deren Verlauf

Kurzreferenz: Aliasse und result_type

KommandoAliasresult_type
list-process-instanceslsiprocess-instances
list-process-modelslspprocess-models
list-user-taskslsuuser-tasks
deploy-filesdeploydeployed-files
start-process-modelstartprocess-instances
stop-process-instancestopprocess-instances
retry-process-instanceretryprocess-instances
show-process-instanceshowprocess-instances
finish-user-taskfinishuser-tasks
remove-process-modelsremoveremoved-process-model-ids

Häufige Pipe-Kombinationen

Pipe-KetteBeschreibung
pc engine deploy ... | pc engine start {{.processModelId}}Deployen und direkt starten
pc engine lsi --filter-by-state running | pc engine stop {{.processInstanceId}}Laufende Instanzen stoppen
pc engine lsi --filter-by-state error | pc engine retry {{.processInstanceId}}Fehlgeschlagene Instanzen wiederholen
pc engine lsi --filter-by-state error | pc engine show {{.processInstanceId}}Fehlgeschlagene Instanzen inspizieren
pc engine lsi | pc engine lsu --filter-by-correlation-id {{.correlationId}}User-Tasks zu Instanzen finden
pc engine lsp | pc engine remove {{.id}}Alle Modelle entfernen

Fehlerbehandlung

Unbekanntes Feld

Wenn ein Feld im Template nicht existiert, wird ein Fehler mit allen verfügbaren Feldern angezeigt:

$ pc engine lsi | pc engine stop {{.nichtVorhanden}}
Error: Feld 'nichtVorhanden' nicht gefunden. Verfügbar: correlationId, processInstanceId, processDefinitionId, processModelId, processModelName, state, createdAt, finishedAt, ...

Template ohne Pipe-Eingabe

$ pc engine stop {{.processInstanceId}}
Error: Template {{.processInstanceId}} verwendet, aber keine Pipe-Eingabe

Zusammenspiel mit dem Standard-Piping

SchreibweiseMechanismusVerhalten
pc engine lsi | pc engine stopStandardIDs werden automatisch anhand des result_type extrahiert
pc engine lsi | pc engine stop {{.processInstanceId}}TemplateDas Feld wird explizit extrahiert

Wenn ein Template verwendet wird, wird der Standard-Mechanismus für diesen Befehl deaktiviert.

Empfehlung: Verwenden Sie Template-Pipes für neue Workflows. Sie bieten mehr Flexibilität und machen die Absicht des Befehls explizit lesbar.

Shell-Escaping

In manchen Shells müssen die geschweiften Klammern in Anführungszeichen gesetzt werden:

# Empfohlen: Einfache Anführungszeichen pc engine lsi | pc engine stop '{{.processInstanceId}}' # Alternative: Doppelte Anführungszeichen pc engine lsi | pc engine stop "{{.processInstanceId}}" # In den meisten Shells auch ohne Anführungszeichen möglich pc engine lsi | pc engine stop {{.processInstanceId}}