Usa costrutti a ciclo continuo in AWSTOE - EC2 Image Builder

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Usa costrutti a ciclo continuo in AWSTOE

Questa sezione fornisce informazioni per aiutarvi a creare costrutti ciclici in. AWSTOE I costrutti di looping definiscono una sequenza ripetuta di istruzioni. È possibile utilizzare i seguenti tipi di costrutti di loop in: AWSTOE

  • forcostrutti: esegue l'iterazione su una sequenza limitata di numeri interi.

  • forEachcostrutti

    • forEachloop with input list — Itera su una raccolta finita di stringhe.

    • forEachloop con elenco delimitato — Itera su una raccolta finita di stringhe unite da un delimitatore.

Nota

I costrutti di looping supportano solo i tipi di dati di tipo stringa.

Variabili di iterazione di riferimento

Per fare riferimento all'indice e al valore della variabile di iterazione corrente, l'espressione di riferimento {{ loop.* }} deve essere utilizzata all'interno del corpo di input di un passaggio che contiene un costrutto ciclico. Questa espressione non può essere utilizzata per fare riferimento alle variabili di iterazione del costrutto di looping di un altro passaggio.

L'espressione di riferimento è composta dai seguenti membri:

  • {{ loop.index }}— La posizione ordinale dell'iterazione corrente, indicizzata in. 0

  • {{ loop.value }}— Il valore associato alla variabile di iterazione corrente.

Nomi dei loop

Tutti i costrutti in loop hanno un campo nome opzionale per l'identificazione. Se viene fornito un nome di ciclo, può essere utilizzato per fare riferimento alle variabili di iterazione nel corpo di input del passaggio. Per fare riferimento agli indici di iterazione e ai valori di un ciclo denominato, utilizzate {{ <loop_name>.* }} with {{ loop.* }} nel corpo di input del passaggio. Questa espressione non può essere utilizzata per fare riferimento al costrutto di looping denominato di un altro passaggio.

L'espressione di riferimento è composta dai seguenti membri:

  • {{ <loop_name>.index }}— La posizione ordinale dell'iterazione corrente del ciclo denominato, indicizzata in. 0

  • {{ <loop_name>.value }}— Il valore associato alla variabile di iterazione corrente del ciclo denominato.

Risolve le espressioni di riferimento

AWSTOE Risolve le espressioni di riferimento come segue:

  • {{ <loop_name>.* }}— AWSTOE risolve questa espressione utilizzando la logica seguente:

    • Se il ciclo del passaggio attualmente in esecuzione corrisponde al <loop_name> valore, l'espressione di riferimento si risolve nel costrutto di loop del passaggio attualmente in esecuzione.

    • <loop_name>si risolve nel costrutto di looping denominato se appare nella fase attualmente in esecuzione.

  • {{ loop.* }}— AWSTOE risolve l'espressione utilizzando il costrutto di looping definito nella fase attualmente in esecuzione.

Se le espressioni di riferimento vengono utilizzate all'interno di un passaggio che non contiene un ciclo, non AWSTOE risolve le espressioni e vengono visualizzate nel passaggio senza alcuna sostituzione.

Nota

Le espressioni di riferimento devono essere racchiuse tra virgolette doppie per essere interpretate correttamente dal compilatore YAML.

Tipi di costrutti ciclici

Questa sezione fornisce informazioni ed esempi sui tipi di costrutti di looping che possono essere utilizzati in. AWSTOE

forciclo

Il for ciclo itera su un intervallo di numeri interi specificato all'interno di un limite delineato dall'inizio e dalla fine delle variabili. I valori di iterazione sono inclusi nel set [start, end] e includono i valori limite.

AWSTOE verifica i updateBy valori startend, e per garantire che la combinazione non produca un ciclo infinito.

forschema a ciclo continuo

- name: "StepName" action: "ActionModule" loop: name: "string" for: start: int end: int updateBy: int inputs: ...
foringresso in loop
Campo Descrizione Type Obbligatorio Predefinita

name

Nome univoco del ciclo. Deve essere univoco rispetto ad altri nomi di loop nella stessa fase.

Stringa

No

""

start

Valore iniziale dell'iterazione. Non accetta espressioni concatenate.

Numero intero

N/A

end

Valore finale dell'iterazione. Non accetta espressioni concatenate. Numero intero N/A

updateBy

Differenza in base alla quale un valore iterativo viene aggiornato tramite addizione. Deve essere un valore negativo o positivo diverso da zero. Non accetta espressioni concatenate. Numero intero N/A

foresempio di input in loop

- 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

forEachloop con elenco di input

Il forEach ciclo itera su un elenco esplicito di valori, che può essere costituito da stringhe ed espressioni concatenate.

forEachciclo con schema di elenco di input

- name: "StepName" action: "ActionModule" loop: name: "string" forEach: - "string" inputs: ...
forEachloop con immissione della lista di input
Campo Descrizione Type Obbligatorio Predefinita

name

Nome univoco del ciclo. Deve essere univoco rispetto ad altri nomi di loop nella stessa fase.

Stringa

No

""

Elenco di stringhe di loop forEach

Elenco di stringhe per l'iterazione. Accetta espressioni concatenate come stringhe nell'elenco. Le espressioni concatenate devono essere racchiuse tra virgolette doppie affinché il compilatore YAML le interpreti correttamente.

Elenco di stringhe

N/A

forEachciclo con elenco di input (esempio 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

forEachciclo con elenco di input (esempio 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 }}"

forEachciclo con elenco di input (esempio 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 }}"

forEachciclo con elenco delimitato

Il ciclo scorre su una stringa contenente valori separati da un delimitatore. Per iterare sui componenti della stringa, AWSTOE utilizza il delimitatore per dividere la stringa in un array adatto all'iterazione.

forEachciclo con schema a elenco delimitato

- name: "StepName" action: "ActionModule" loop: name: "string" forEach: list: "string" delimiter: ".,;:\n\t -_" inputs: ...
forEachciclo con inserimento di un elenco delimitato
Campo Descrizione Type Obbligatorio Predefinita

name

Nome univoco assegnato al ciclo. Dovrebbe essere unico se confrontato con altri nomi di loop nella stessa fase.

Stringa

No

""

list

Una stringa composta da stringhe costituenti unite da un carattere delimitatore comune. Accetta anche espressioni concatenate. In caso di espressioni concatenate, assicuratevi che siano racchiuse tra virgolette doppie per una corretta interpretazione da parte del compilatore YAML. Stringa

N/A

delimiter

Carattere usato per separare le stringhe all'interno di un blocco. L'impostazione predefinita è il carattere virgola. È consentito un solo carattere delimitatore dall'elenco fornito:
  • Punto: "."

  • Virgola: ","

  • Punto e virgola: ";"

  • Colon: ":"

  • Nuova riga: "\n"

  • Scheda: "\t"

  • Spazio: " "

  • Trattino: "-"

  • Sottolineatura: "_"

Le espressioni concatenate non possono essere utilizzate.

Stringa No Virgola: ","
Nota

Il valore di list viene considerato come una stringa immutabile. Se l'origine di list viene modificata durante l'esecuzione, non verrà riflessa durante l'esecuzione.

forEachciclo con elenco delimitato (esempio 1).

Questo esempio utilizza il seguente modello di espressione concatenata per fare riferimento all'output di un altro passaggio:. <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 }}"

forEachciclo con elenco delimitato (esempio 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 }}"

Campi Step

I loop fanno parte di un passaggio. Qualsiasi campo relativo all'esecuzione di un passaggio non viene applicato alle singole iterazioni. I campi della fase si applicano solo a livello di fase, come segue:

  • TimeoutSeconds: tutte le iterazioni del ciclo devono essere eseguite entro il periodo di tempo specificato in questo campo. Se l'esecuzione del ciclo scade, AWSTOE esegue la politica di riprova del passaggio e reimposta il parametro di timeout per ogni nuovo tentativo. Se l'esecuzione del ciclo supera il valore di timeout dopo aver raggiunto il numero massimo di tentativi, il messaggio di errore della fase indica che l'esecuzione del ciclo è scaduta.

  • OnFailure: la gestione degli errori viene applicata alla fase nel modo seguente:

    • Se OnFailure è impostato suAbort, AWSTOE esce dal ciclo e riprova il passaggio in base alla politica di ripetizione dei tentativi. Dopo il numero massimo di tentativi, AWSTOE contrassegna il passaggio corrente come fallito e interrompe l'esecuzione del processo.

      AWSTOE imposta il codice di stato per la fase principale e il documento suFailed.

      Nota

      Nessun altro passaggio viene eseguito dopo il passaggio fallito.

    • Se OnFailure è impostato suContinue, AWSTOE esce dal ciclo e riprova il passaggio in base alla politica di ripetizione dei tentativi. Dopo il numero massimo di tentativi, AWSTOE contrassegna il passaggio corrente come fallito e continua a eseguire il passaggio successivo.

      AWSTOE imposta il codice di stato per la fase principale e il documento suFailed.

    • Se OnFailure è impostato suIgnore, AWSTOE esce dal ciclo e riprova il passaggio in base alla politica di ripetizione dei tentativi. Dopo il numero massimo di tentativi, AWSTOE contrassegna il passaggio corrente come IgnoredFailure e continua a eseguire il passaggio successivo.

      AWSTOE imposta il codice di stato per la fase principale e il documento suSuccessWithIgnoredFailure.

      Nota

      Viene comunque considerata un'esecuzione riuscita, ma include informazioni che indicano che uno o più passaggi non sono riusciti e sono stati ignorati.

  • MaxAttempts: per ogni nuovo tentativo, l'intero passaggio e tutte le iterazioni vengono eseguiti dall'inizio.

  • status: lo stato generale dell'esecuzione di un passaggio. statusnon rappresenta lo stato delle singole iterazioni. Lo stato di un passaggio con loop è determinato come segue:

    • Se una singola iterazione non viene eseguita, lo stato di un passaggio indica un errore.

    • Se tutte le iterazioni hanno esito positivo, lo stato di un passaggio indica un successo.

  • startTime: l'ora di inizio complessiva dell'esecuzione di un passaggio. Non rappresenta l'ora di inizio delle singole iterazioni.

  • EndTime: l'ora di fine complessiva dell'esecuzione di un passaggio. Non rappresenta l'ora di fine delle singole iterazioni.

  • FailureMessage: include gli indici di iterazione che hanno avuto esito negativo in caso di errori diversi dal timeout. In caso di errori di timeout, il messaggio indica che l'esecuzione del ciclo non è riuscita. Non vengono forniti messaggi di errore individuali per ogni iterazione per ridurre al minimo la dimensione dei messaggi di errore.

Output di step e iterazione

Ogni iterazione contiene un output. Alla fine di un ciclo, AWSTOE consolida tutti gli output di iterazione riusciti in. detailedOutput.json Gli output consolidati sono una raccolta di valori che appartengono alle chiavi di output corrispondenti, come definito nello schema di output del modulo di azione. L'esempio seguente mostra come vengono consolidati gli output:

Output di ExecuteBash per l'iterazione 1

{ "stdout":"Hello" }

Output di ExecuteBash per l'iterazione 2

{ "stdout":"World" }

Output di ExecuteBash for Step

{ "stdout":"Hello\nWorld" }

Ad esempio ExecuteBashExecutePowerShell, e ExecuteBinary sono moduli di azione che restituiscono STDOUT come output del modulo di azione. STDOUTi messaggi vengono uniti al nuovo carattere di riga per produrre l'output complessivo dello step indetailedOutput.json.

AWSTOE non consoliderà i risultati delle iterazioni non riuscite.