Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verwenden Sie Looping-Konstrukte in AWSTOE
Dieser Abschnitt enthält Informationen, die Ihnen beim Erstellen von Schleifenkonstrukten in der helfen sollen. AWSTOE Schleifenkonstrukte definieren eine sich wiederholende Folge von Anweisungen. Sie können die folgenden Typen von Schleifenkonstrukten verwenden in: AWSTOE
-
for
Konstrukte — Iteriert über eine begrenzte Folge von ganzen Zahlen. -
forEach
Konstrukte-
forEach
Schleife mit Eingabeliste — Iteriert über eine endliche Sammlung von Zeichenketten. -
forEach
Schleife mit begrenzter Liste — Iteriert über eine endliche Sammlung von Zeichenketten, die durch ein Trennzeichen verbunden sind.
-
Anmerkung
Schleifenkonstrukte unterstützen nur Zeichenkettendatentypen.
Themen, die sich in einer Schleife wiederholen
Referenz-Iterationsvariablen
Um auf den Index und den Wert der aktuellen Iterationsvariablen zu verweisen, {{ loop.* }}
muss der Referenzausdruck im Eingabekörper eines Schritts verwendet werden, der ein Schleifenkonstrukt enthält. Dieser Ausdruck kann nicht verwendet werden, um auf die Iterationsvariablen des Schleifenkonstrukts eines anderen Schritts zu verweisen.
Der Referenzausdruck besteht aus den folgenden Elementen:
{{ loop.index }}
— Die Ordinalposition der aktuellen Iteration, die indexiert ist.0
{{ loop.value }}
— Der Wert, der der aktuellen Iterationsvariablen zugeordnet ist.
Namen von Schleifen
Alle Schleifenkonstrukte haben ein optionales Namensfeld zur Identifizierung. Wenn ein Schleifenname angegeben wird, kann er verwendet werden, um auf Iterationsvariablen im Eingabekörper des Schritts zu verweisen. Um auf die Iterationsindizes und Werte einer benannten Schleife zu verweisen, verwenden Sie {{ <loop_name>.* }}
with {{ loop.* }}
im Eingabebereich des Schritts. Dieser Ausdruck kann nicht verwendet werden, um auf das benannte Schleifenkonstrukt eines anderen Schritts zu verweisen.
Der Referenzausdruck besteht aus den folgenden Elementen:
{{ <loop_name>.index }}
— Die Ordinalposition der aktuellen Iteration der benannten Schleife, die indexiert ist.0
{{ <loop_name>.value }}
— Der Wert, der der aktuellen Iterationsvariablen der benannten Schleife zugeordnet ist.
Referenzausdrücke auflösen
Der AWSTOE löst Referenzausdrücke wie folgt auf:
{{ <loop_name>.* }}
— AWSTOE löst diesen Ausdruck mit der folgenden Logik auf:Wenn die Schleife des aktuell laufenden Schritts mit dem
<loop_name>
Wert übereinstimmt, wird der Referenzausdruck in das Schleifenkonstrukt des aktuell laufenden Schritts aufgelöst.<loop_name>
wird in das benannte Schleifenkonstrukt aufgelöst, wenn es im aktuell laufenden Schritt vorkommt.
{{ loop.* }}
— AWSTOE löst den Ausdruck unter Verwendung des im aktuell ausgeführten Schritt definierten Schleifenkonstrukts auf.
Wenn Referenzausdrücke innerhalb eines Schritts verwendet werden, der keine Schleife enthält, werden die Ausdrücke AWSTOE nicht aufgelöst und sie erscheinen im Schritt ohne Ersatz.
Anmerkung
Referenzausdrücke müssen in doppelte Anführungszeichen eingeschlossen werden, damit sie vom YAML Compiler korrekt interpretiert werden können.
Arten von Looping-Konstrukten
Dieser Abschnitt enthält Informationen und Beispiele zu Schleifenkonstrukttypen, die in der verwendet werden können. AWSTOE
Typen von Looping-Konstrukten
for
Schleife
Die for
Schleife iteriert über einen Bereich von ganzen Zahlen, die innerhalb einer Grenze angegeben sind, die durch den Anfang und das Ende der Variablen umrissen wird. Die iterierenden Werte befinden sich in der Menge [start, end]
und enthalten Grenzwerte.
AWSTOE überprüft die updateBy
Wertestart
, undend
, um sicherzustellen, dass die Kombination nicht zu einer Endlosschleife führt.
for
Schleifenschema
- name: "StepName" action: "ActionModule" loop: name: "string" for: start: int end: int updateBy: int inputs: ...
Feld | Beschreibung | Typ | Erforderlich | Standard |
---|---|---|---|---|
|
Eindeutiger Name der Schleife. Er muss im Vergleich zu anderen Schleifennamen in derselben Phase eindeutig sein. |
String |
Nein |
"" |
|
Startwert der Iteration. Akzeptiert keine Verkettung von Ausdrücken. |
Ganzzahl |
Ja |
– |
|
Endwert der Iteration. Akzeptiert keine Verkettung von Ausdrücken. | Ganzzahl | Ja | – |
|
Unterschied, um den ein iterierender Wert durch Addition aktualisiert wird. Es muss ein negativer oder positiver Wert ungleich Null sein. Akzeptiert keine Verkettung von Ausdrücken. | Ganzzahl | Ja | – |
for
Beispiel für eine Schleifeneingabe
- name: "CalculateFileUploadLatencies" action: "ExecutePowerShell" loop: for: start: 100000 end: 1000000 updateBy: 100000 inputs: commands: - | $f = new-object System.IO.FileStream c:\temp\test{{ loop.index }}.txt, Create, ReadWrite $f.SetLength({{ loop.value }}MB) $f.Close() - c:\users\administrator\downloads\latencyTest.exe --file c:\temp\test{{ loop.index }}.txt - AWS s3 cp c:\users\administrator\downloads\latencyMetrics.json s3://bucket/latencyMetrics.json - | Remove-Item -Path c:\temp\test{{ loop.index }}.txt Remove-Item -Path c:\users\administrator\downloads\latencyMetrics.json
forEach
Schleife mit Eingabeliste
Die forEach
Schleife iteriert anhand einer expliziten Werteliste, bei der es sich um Zeichenketten und verkettete Ausdrücke handeln kann.
forEach
Schleife mit Eingabelistenschema
- name: "StepName" action: "ActionModule" loop: name: "string" forEach: - "string" inputs: ...
Feld | Beschreibung | Typ | Erforderlich | Standard |
---|---|---|---|---|
|
Eindeutiger Name der Schleife. Er muss im Vergleich zu anderen Schleifennamen in derselben Phase eindeutig sein. |
String |
Nein |
"" |
Liste der Zeichenketten der |
Liste der Zeichenketten für die Iteration. Akzeptiert verkettete Ausdrücke als Zeichenketten in der Liste. Verkettete Ausdrücke müssen in doppelte Anführungszeichen eingeschlossen werden, damit der YAML Compiler sie korrekt interpretieren kann. |
Liste von Zeichenfolgen |
Ja |
– |
forEach
Schleife mit Eingabeliste, Beispiel 1
- name: "ExecuteCustomScripts" action: "ExecuteBash" loop: name: BatchExecLoop forEach: - /tmp/script1.sh - /tmp/script2.sh - /tmp/script3.sh inputs: commands: - echo "Count {{ BatchExecLoop.index }}" - sh "{{ loop.value }}" - | retVal=$? if [ $retVal -ne 0 ]; then echo "Failed" else echo "Passed" fi
forEach
Schleife mit Eingabeliste, Beispiel 2
- name: "RunMSIWithDifferentArgs" action: "ExecuteBinary" loop: name: MultiArgLoop forEach: - "ARG1=C:\Users ARG2=1" - "ARG1=C:\Users" - "ARG1=C:\Users ARG3=C:\Users\Administrator\Documents\f1.txt" inputs: commands: path: "c:\users\administrator\downloads\runner.exe" args: - "{{ MultiArgLoop.value }}"
forEach
Schleife mit Eingabeliste, Beispiel 3
- name: "DownloadAllBinaries" action: "S3Download" loop: name: MultiArgLoop forEach: - "bin1.exe" - "bin10.exe" - "bin5.exe" inputs: - source: "s3://bucket/{{ loop.value }}" destination: "c:\temp\{{ loop.value }}"
forEach
Schleife mit begrenzter Liste
Die Schleife iteriert über eine Zeichenfolge, die Werte enthält, die durch ein Trennzeichen getrennt sind. Um über die Bestandteile der Zeichenfolge zu iterieren, AWSTOE verwendet sie das Trennzeichen, um die Zeichenfolge in ein Array aufzuteilen, das für die Iteration geeignet ist.
forEach
Schleife mit einem durch Trennzeichen getrennten Listenschema
- name: "StepName" action: "ActionModule" loop: name: "string" forEach: list: "string" delimiter: ".,;:\n\t -_" inputs: ...
Feld | Beschreibung | Typ | Erforderlich | Standard |
---|---|---|---|---|
|
Der Schleife wurde ein eindeutiger Name gegeben. Er sollte im Vergleich zu anderen Schleifennamen in derselben Phase eindeutig sein. |
String |
Nein |
"" |
|
Eine Zeichenfolge, die aus einzelnen Zeichenketten besteht, die durch ein gemeinsames Trennzeichen miteinander verbunden sind. Akzeptiert auch verkettete Ausdrücke. Stellen Sie bei verketteten Ausdrücken sicher, dass diese in doppelte Anführungszeichen eingeschlossen sind, damit sie vom Compiler korrekt interpretiert werden können. YAML | String |
Ja |
– |
|
Zeichen, das verwendet wird, um Zeichenketten innerhalb eines Blocks voneinander zu trennen. Die Standardeinstellung ist das Kommazeichen. Aus der angegebenen Liste ist nur ein Trennzeichen zulässig:
Verkettungsausdrücke können nicht verwendet werden. |
String | Nein | Komma: "," |
Anmerkung
Der Wert von list
wird als unveränderliche Zeichenfolge behandelt. Wenn die Quelle von während der Laufzeit geändert list
wird, wird dies während der Ausführung nicht berücksichtigt.
forEach
Schleife mit begrenzter Liste, Beispiel 1
In diesem Beispiel wird das folgende Verkettungsausdrucksmuster verwendet, um auf die Ausgabe eines anderen Schritts zu verweisen:. <phase_name>.<step_name>.[inputs | outputs].<var_name>
- name: "RunMSIs" action: "ExecuteBinary" loop: forEach: list: "{{ build.GetAllMSIPathsForInstallation.outputs.stdout }}" delimiter: "\n" inputs: commands: path: "{{ loop.value }}"
forEach
Schleife mit begrenzter Liste, Beispiel 2
- name: "UploadMetricFiles" action: "S3Upload" loop: forEach: list: "/tmp/m1.txt,/tmp/m2.txt,/tmp/m3.txt,..." inputs: commands: - source: "{{ loop.value }}" destination: "s3://bucket/key/{{ loop.value }}"
Felder für Schritte
Loops sind Teil eines Schritts. Felder, die sich auf die Ausführung eines Schritts beziehen, werden nicht auf einzelne Iterationen angewendet. Schrittfelder gelten wie folgt nur auf Schrittebene:
-
timeoutSeconds— Alle Iterationen der Schleife müssen innerhalb des in diesem Feld angegebenen Zeitraums ausgeführt werden. Wenn bei der Schleifenausführung eine AWSTOE Zeitüberschreitung eintritt, wird die Wiederholungsrichtlinie des Schritts ausgeführt und der Timeout-Parameter für jeden neuen Versuch zurückgesetzt. Wenn der Schleifenlauf nach Erreichen der maximalen Anzahl von Wiederholungen den Timeout-Wert überschreitet, gibt die Fehlermeldung des Schritts an, dass für den Schleifenlauf eine Zeitüberschreitung aufgetreten ist.
-
onFailure— Die Fehlerbehandlung wird wie folgt auf den Schritt angewendet:
-
Wenn auf gesetzt onFailureist
Abort
, wird die Schleife AWSTOE beendet und der Schritt gemäß der Wiederholungsrichtlinie wiederholt. AWSTOE Markiert den aktuellen Schritt nach der maximalen Anzahl von Wiederholungsversuchen als fehlgeschlagen und beendet die Ausführung des Prozesses.AWSTOE setzt den Statuscode für die übergeordnete Phase und das Dokument auf
Failed
.Anmerkung
Nach dem fehlgeschlagenen Schritt werden keine weiteren Schritte ausgeführt.
-
Wenn auf gesetzt onFailureist
Continue
, wird die Schleife AWSTOE beendet und der Schritt gemäß der Wiederholungsrichtlinie wiederholt. AWSTOE Markiert den aktuellen Schritt nach der maximalen Anzahl von Wiederholungsversuchen als fehlgeschlagen und fährt mit der Ausführung des nächsten Schritts fort.AWSTOE setzt den Statuscode für die übergeordnete Phase und das Dokument auf
Failed
. -
Wenn auf gesetzt onFailureist
Ignore
, wird die Schleife AWSTOE beendet und der Schritt gemäß der Wiederholungsrichtlinie wiederholt. AWSTOE Markiert nach der maximalen Anzahl von Wiederholungsversuchen den aktuellen Schritt alsIgnoredFailure
und fährt mit der Ausführung des nächsten Schritts fort.AWSTOE setzt den Statuscode für die übergeordnete Phase und das Dokument auf
SuccessWithIgnoredFailure
.Anmerkung
Dies wird immer noch als erfolgreiche Ausführung angesehen, enthält jedoch Informationen, die Sie darüber informieren, dass ein oder mehrere Schritte fehlgeschlagen sind und ignoriert wurden.
-
maxAttempts — Bei jedem erneuten Versuch werden der gesamte Schritt und alle Iterationen von Anfang an ausgeführt.
Status — Der Gesamtstatus der Ausführung eines Schritts.
status
stellt nicht den Status einzelner Iterationen dar. Der Status eines Schritts mit Schleifen wird wie folgt bestimmt:Wenn eine einzelne Iteration nicht ausgeführt werden kann, weist der Status eines Schritts auf einen Fehler hin.
Wenn alle Iterationen erfolgreich sind, deutet der Status eines Schritts auf Erfolg hin.
startTime — Die Gesamtstartzeit der Ausführung eines Schritts. Stellt nicht die Startzeit einzelner Iterationen dar.
endTime — Die Gesamtendzeit der Ausführung eines Schritts. Stellt nicht die Endzeit einzelner Iterationen dar.
failureMessage — Schließt die Iterationsindizes ein, die bei Fehlern ohne Timeout fehlgeschlagen sind. Bei Timeoutfehlern gibt die Meldung an, dass der Schleifenlauf fehlgeschlagen ist. Einzelne Fehlermeldungen für jede Iteration werden nicht bereitgestellt, um die Größe der Fehlermeldungen zu minimieren.
Ausgaben für Schritt und Iteration
Jede Iteration enthält eine Ausgabe. Am Ende eines Schleifenlaufs AWSTOE konsolidiert es alle erfolgreichen Iterationsausgaben in. detailedOutput.json
Die konsolidierten Ausgaben sind eine Zusammenstellung von Werten, die zu den entsprechenden Ausgabeschlüsseln gehören, wie sie im Ausgabeschema des Aktionsmoduls definiert sind. Das folgende Beispiel zeigt, wie die Ausgaben konsolidiert werden:
Ausgabe von ExecuteBash
für Iteration 1
{ "stdout":"Hello" }
Ausgabe von ExecuteBash
für Iteration 2
{ "stdout":"World" }
Ausgabe von ExecuteBash
für Schritt
{ "stdout":"Hello\nWorld" }
Zum Beispiel ExecuteBinary
sind ExecuteBash
ExecutePowerShell
, und Aktionsmodule, die STDOUT
als Aktionsmodulausgabe zurückgegeben werden. STDOUT
Nachrichten werden mit dem neuen Zeilenzeichen verknüpft, um die Gesamtausgabe des Step-In zu erzeugendetailedOutput.json
.
AWSTOE konsolidiert nicht die Ausgaben erfolgloser Iterationen.