Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Usar constructos en bucle en TOE de AWS
En esta sección se proporciona información que le ayudará a crear constructos en bucle en TOE de AWS. Los constructos en bucle definen una secuencia repetida de instrucciones. Puede utilizar los siguientes tipos de constructos en bucle en TOE de AWS:
-
Constructos
for
: se repiten en iteraciones sobre una secuencia acotada de números enteros. -
Constructos
forEach
-
Bucle
forEach
con lista de entradas: se repite en iteraciones sobre una colección finita de cadenas. -
Bucle
forEach
con lista delimitada: repite una colección finita de cadenas unidas por un delimitador.
-
nota
Los constructos en bucle solo admiten tipos de datos de cadena.
Temas de constructos en bucle
Variables de iteración de referencia
Para hacer referencia al índice y al valor de la variable de iteración actual, la expresión de referencia {{ loop.* }}
debe usarse en el cuerpo de entrada de un paso que contenga un constructo en bucle. Esta expresión no se puede utilizar para hacer referencia a las variables de iteración del constructo en bucle de otro paso.
La expresión de referencia consta de los siguientes miembros:
{{ loop.index }}
: la posición ordinal de la iteración actual, que está indexada en0
.{{ loop.value }}
: el valor asociado a la variable de iteración actual.
Nombres de bucles
Todos los constructos en bucle tienen un campo de nombre opcional para su identificación. Si se proporciona un nombre de bucle, este se puede utilizar para hacer referencia a las variables de iteración del cuerpo de entrada del paso. Para hacer referencia a los índices y valores de iteración de un bucle denominado, utilice {{ <loop_name>.* }}
con {{ loop.* }}
en el cuerpo de entrada del paso. Esta expresión no se puede utilizar para hacer referencia al constructo en bucle denominado de otro paso.
La expresión de referencia consta de los siguientes miembros:
{{ <loop_name>.index }}
: la posición ordinal de la iteración actual del bucle denominado, que está indexada en0
.{{ <loop_name>.value }}
: el valor asociado a la variable de iteración actual del bucle denominado.
Resolución de expresiones de referencia
TOE de AWS Resuelve las expresiones de referencia de la siguiente manera:
{{ <loop_name>.* }}
— TOE de AWS resuelve esta expresión mediante la siguiente lógica:Si el bucle del paso que se está ejecutando actualmente coincide con el valor
<loop_name>
, la expresión de referencia se convierte en el constructo en bucle del paso que se está ejecutando actualmente.<loop_name>
se resuelve en el constructo de bucle denominado si aparece dentro del paso que se está ejecutando actualmente.
{{ loop.* }}
— TOE de AWS resuelve la expresión mediante la construcción en bucle definida en el paso que se está ejecutando actualmente.
Si se utilizan expresiones de referencia en un paso que no contiene un bucle, TOE de AWS no resuelve las expresiones y aparecen en el paso sin sustituirlas.
nota
Las expresiones de referencia deben ir entre comillas dobles para que el YAML compilador las interprete correctamente.
Tipos de constructos en bucle
Esta sección contiene información y ejemplos sobre los tipos de constructos en bucle que se pueden utilizar en TOE de AWS.
Tipos de constructos en bucle
Bucle for
El bucle for
itera en un rango de enteros especificado dentro de un límite delimitado por el inicio y el final de las variables. Los valores iterativos están en el conjunto [start, end]
e incluyen los valores límite.
TOE de AWS verifica los updateBy
valores start
end
, y para garantizar que la combinación no dé lugar a un bucle infinito.
Esquema de bucle for
- name: "StepName" action: "ActionModule" loop: name: "string" for: start: int end: int updateBy: int inputs: ...
Campo | Descripción | Tipo | Obligatorio/a | Predeterminado/a |
---|---|---|---|---|
|
Nombre único del bucle. Debe ser único en comparación con otros nombres de bucles de la misma fase. |
Cadena |
No |
"" |
|
Valor inicial de la iteración. No acepta expresiones encadenadas. |
Entero |
Sí |
n/a |
|
Valor final de la iteración. No acepta expresiones encadenadas. | Entero | Sí | n/a |
|
Diferencia por la que un valor iterativo se actualiza mediante la adición. Debe ser un valor negativo o positivo distinto de cero. No acepta expresiones encadenadas. | Entero | Sí | n/a |
Ejemplo de entrada de bucle for
- 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
Bucle forEach
con lista de entradas
El bucle forEach
itera en una lista explícita de valores, que pueden ser cadenas y expresiones encadenadas.
Bucle forEach
con esquema de lista de entrada
- name: "StepName" action: "ActionModule" loop: name: "string" forEach: - "string" inputs: ...
Campo | Descripción | Tipo | Obligatorio/a | Predeterminado/a |
---|---|---|---|---|
|
Nombre único del bucle. Debe ser único en comparación con otros nombres de bucles de la misma fase. |
Cadena |
No |
"" |
Lista de cadenas de bucle |
Lista de cadenas para la iteración. Acepta expresiones encadenadas como cadenas en la lista. Las expresiones encadenadas deben ir entre comillas dobles para que el YAML compilador las interprete correctamente. |
Lista de cadenas |
Sí |
n/a |
Bucle forEach
con lista de entradas (ejemplo 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
Bucle forEach
con lista de entradas (ejemplo 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 }}"
Bucle forEach
con lista de entradas (ejemplo 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 }}"
Bucle forEach
con lista delimitada
El bucle itera sobre una cadena que contiene valores separados por un delimitador. Para iterar sobre los componentes de la cadena, TOE de AWS usa el delimitador para dividir la cadena en una matriz adecuada para la iteración.
Bucle forEach
con esquema de lista delimitada
- name: "StepName" action: "ActionModule" loop: name: "string" forEach: list: "string" delimiter: ".,;:\n\t -_" inputs: ...
Campo | Descripción | Tipo | Obligatorio/a | Predeterminado/a |
---|---|---|---|---|
|
Nombre único del bucle. Debe ser único en comparación con otros nombres de bucles de la misma fase. |
Cadena |
No |
"" |
|
Cadena compuesta por cadenas constitutivas unidas por un carácter delimitador común. También acepta expresiones encadenadas. En el caso de expresiones encadenadas, asegúrese de que estén entre comillas dobles para que el compilador las interprete correctamente. YAML | Cadena |
Sí |
n/a |
|
Carácter que se usa para separar las cadenas dentro de un bloque. El valor predeterminado es el carácter de coma. Solo se permite un carácter delimitador de la lista dada:
No se pueden utilizar expresiones encadenadas. |
Cadena | No | Coma: "," |
nota
El valor de list
se trata como una cadena inmutable. Si la fuente de list
se cambia durante el tiempo de ejecución, no se reflejará durante la ejecución.
Bucle forEach
con lista delimitada (ejemplo 1)
Este ejemplo utiliza el siguiente patrón de expresión de encadenamiento para hacer referencia al resultado de otro paso: <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 }}"
Bucle forEach
con lista delimitada (ejemplo 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 }}"
Campos de pasos
Los bucles son parte de un paso. Los campos relacionados con la ejecución de un paso no se aplican a las iteraciones individuales. Los campos de paso se aplican solo a nivel del paso, de la siguiente manera:
-
timeoutSeconds— Todas las iteraciones del bucle deben ejecutarse dentro del período de tiempo especificado en este campo. Si se agota el tiempo de espera del bucle, se TOE de AWS ejecuta la política de reintentos del paso y se restablece el parámetro de tiempo de espera para cada nuevo intento. Si la ejecución del bucle supera el valor de tiempo de espera tras alcanzar el número máximo de reintentos, el mensaje de error del paso indica que se ha agotado el tiempo de espera de la ejecución del bucle.
-
onFailure— La gestión de errores se aplica al paso de la siguiente manera:
-
Si onFailureestá establecido en
Abort
, TOE de AWS sale del bucle y vuelve a intentar el paso de acuerdo con la política de reintentos. Tras el número máximo de reintentos, TOE de AWS marca el paso actual como fallido y detiene la ejecución del proceso.TOE de AWS establece el código de estado de la fase principal y el documento en.
Failed
nota
No se ejecutarán más pasos después del paso con errores.
-
Si onFailureestá establecido en
Continue
, TOE de AWS sale del bucle y vuelve a intentar el paso de acuerdo con la política de reintentos. Tras el número máximo de reintentos, TOE de AWS marca el paso actual como fallido y continúa hasta ejecutar el paso siguiente.TOE de AWS establece el código de estado de la fase principal y el documento en.
Failed
-
Si onFailureestá establecido en
Ignore
, TOE de AWS sale del bucle y vuelve a intentar el paso de acuerdo con la política de reintentos. Tras el número máximo de reintentos, TOE de AWS marca el paso actual comoIgnoredFailure
y continúa hasta ejecutar el paso siguiente.TOE de AWS establece el código de estado de la fase principal y el documento en.
SuccessWithIgnoredFailure
nota
Esto sigue considerándose una ejecución correcta, pero incluye información que le permite saber que uno o más pasos tienen errores y se ignoraron.
-
maxAttempts — Para cada reintento, todo el paso y todas las iteraciones se ejecutan desde el principio.
status: el estado general de la ejecución de un paso.
status
no representa el estado de las iteraciones individuales. El estado de un paso con bucles se determina de la siguiente manera:Si no se puede ejecutar una sola iteración, el estado de un paso indica que se ha producido un error.
Si todas las iteraciones se realizan correctamente, el estado de un paso indica que se ha realizado correctamente.
startTime — La hora total de inicio de la ejecución de un paso. No representa la hora de inicio de las iteraciones individuales.
endTime — La hora total de finalización de la ejecución de un paso. No representa la hora de finalización de las iteraciones individuales.
failureMessage — Incluye los índices de iteración que fallaron en caso de errores no relacionados con el tiempo de espera. En caso de errores de tiempo de espera, el mensaje indica que se produjo un error en la ejecución del bucle. No se proporcionan mensajes de error individuales para cada iteración para minimizar el tamaño de los mensajes de error.
Salidas de paso e iteración
Cada iteración contiene una salida. Al final de una ejecución en bucle, TOE de AWS consolida todos los resultados de iteración correctos. detailedOutput.json
Las salidas consolidadas son una recopilación de valores que pertenecen a las claves de salida correspondientes, como se define en el esquema de salida del módulo de acción. El siguiente ejemplo muestra cómo se consolidan las salidas:
Salida de ExecuteBash
para la iteración 1
{ "stdout":"Hello" }
Salida de ExecuteBash
para la iteración 2
{ "stdout":"World" }
Salida de ExecuteBash
para el paso
{ "stdout":"Hello\nWorld" }
Por ejemplo, ExecuteBash
, ExecutePowerShell
y ExecuteBinary
son módulos de acción que se devuelven STDOUT
como salida del módulo de acción. Los mensajes STDOUT
se unen con el carácter de la nueva línea para producir la salida general del paso en detailedOutput.json
.
TOE de AWS no consolidará los resultados de las iteraciones fallidas.