기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWSTOE에서 루프 구문 사용
이 섹션에서는 AWSTOE에서 반복 구문을 작성하는 데 도움이 되는 정보를 제공합니다. 반복 구문은 반복되는 명령 시퀀스를 정의합니다. AWSTOE에서는 다음과 같은 유형의 반복 구문을 사용할 수 있습니다.
-
for
구문 - 한정된 정수 시퀀스를 반복합니다. -
forEach
구문-
입력 목록이 있는
forEach
루프 - 유한한 문자열 컬렉션을 반복합니다. -
구분된 목록이 있는
forEach
루프 - 구분 기호로 연결된 유한한 문자열 컬렉션을 반복합니다.
-
참고
반복 구문은 문자열 데이터 유형만 지원합니다.
참조 반복 변수
현재 반복 변수의 인덱스와 값을 참조하려면 반복 구문이 포함된 단계의 입력 본문 내에서 참조 표현식 {{ loop.* }}
(을)를 사용해야 합니다. 이 표현식은 다른 단계의 반복 구문의 반복 변수를 참조하는 데 사용할 수 없습니다.
참조 표현식은 다음 멤버로 구성됩니다.
{{ loop.index }}
-0
에서 인덱싱된 현재 반복의 순서 위치입니다.{{ loop.value }}
- 현재 반복 변수와 관련된 값입니다.
루프 이름
모든 반복 구문에는 식별을 위한 선택적 이름 필드가 있습니다. 루프 이름을 제공하면 이 이름을 사용하여 단계 입력 본문에 있는 반복 변수를 참조할 수 있습니다. 명명된 반복의 반복 인덱스 및 값을 참조하려면 단계의 입력 본문에서 {{ <loop_name>.* }}
및 {{ loop.* }}
(을)를 사용하세요. 이 표현식은 다른 단계의 명명된 반복 구문을 참조하는 데 사용할 수 없습니다.
참조 표현식은 다음 멤버로 구성됩니다.
{{ <loop_name>.index }}
-0
에서 인덱싱되는 명명된 반복의 현재 반복의 순서 위치입니다.{{ <loop_name>.value }}
- 명명된 루프의 현재 반복 변수와 관련된 값입니다.
참조 표현식 해결
는 다음과 같이 참조 표현식을 AWSTOE 확인합니다.
{{ <loop_name>.* }}
– 다음 로직을 사용하여이 표현식을 AWSTOE 해결합니다.현재 실행 중인 단계의 루프가
<loop_name>
값과 일치하면 참조 표현식은 현재 실행 중인 단계의 반복 구조로 해석됩니다.<loop_name>
에서 명명된 반복 구조가 현재 실행 중인 단계 내에 나타나는 경우 해당 구문으로 해석됩니다.
{{ loop.* }}
–현재 실행 중인 단계에 정의된 루프 구성 요소를 사용하여 표현식을 AWSTOE 해결합니다.
루프가 포함되지 않은 단계에서 참조 표현식을 사용하는 경우는 표현식을 확인 AWSTOE 하지 않으며 대체 없이 단계에 표시됩니다.
참고
YAML 컴파일러가 올바르게 해석하려면 참조 표현식을 큰따옴표로 묶어야 합니다.
반복 구문의 유형
이 섹션에서는 AWSTOE에서 사용할 수 있는 반복 구문 유형에 대한 정보와 예제를 제공합니다.
for
루프
for
루프는 변수의 시작과 끝으로 윤곽이 그려진 경계 내에 지정된 정수 범위에 대해 반복됩니다. 반복 값은 세트 [start, end]
내에 있으며 경계 값을 포함합니다.
AWSTOE 는 start
, end
및 updateBy
값을 확인하여 조합으로 인해 무한 루프가 발생하지 않도록 합니다.
for
루프 스키마
- name: "StepName" action: "ActionModule" loop: name: "string" for: start: int end: int updateBy: int inputs: ...
필드 | 설명 | 형식 | 필수 | 기본값 |
---|---|---|---|---|
|
루프의 고유 이름. 동일한 단계의 다른 루프 이름과 비교하여 고유해야 합니다. |
String |
No |
"" |
|
반복 시작 값. 체인 표현식은 허용되지 않습니다. |
Integer |
예 |
해당 사항 없음 |
|
반복 종료 값. 체인 표현식은 허용되지 않습니다. | Integer | 예 | 해당 사항 없음 |
|
덧셈을 통해 반복 값이 업데이트되는 경우의 차이. 0이 아닌 음수 또는 양수여야 합니다. 체인 표현식은 허용되지 않습니다. | Integer | 예 | 해당 사항 없음 |
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
입력 목록이 있는 forEach
루프
forEach
루프는 문자열과 체인 표현식일 수 있는 명시적 값 목록에서 반복됩니다.
입력 목록 스키마가 있는 forEach
루프
- name: "StepName" action: "ActionModule" loop: name: "string" forEach: - "string" inputs: ...
필드 | 설명 | 형식 | 필수 | 기본값 |
---|---|---|---|---|
|
루프의 고유 이름. 동일한 단계의 다른 루프 이름과 비교하여 고유해야 합니다. |
String |
No |
"" |
|
반복할 문자열 목록. 연결된 표현식을 목록에서 문자열로 받아들입니다. YAML 컴파일러가 올바르게 해석하려면 연결된 표현식을 큰따옴표로 묶어야 합니다. |
문자열 목록 |
예 |
해당 사항 없음 |
입력 목록이 있는 forEach
루프 예제 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
루프 예제 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
루프 예제 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
루프
루프는 구분자로 구분된 값을 포함하는 문자열을 반복합니다. 문자열의 구성 요소를 반복하려면 구분 기호를 AWSTOE 사용하여 문자열을 반복에 적합한 배열로 분할합니다.
구분된 목록 스키마가 있는 forEach
루프
- name: "StepName" action: "ActionModule" loop: name: "string" forEach: list: "string" delimiter: ".,;:\n\t -_" inputs: ...
필드 | 설명 | 형식 | 필수 | 기본값 |
---|---|---|---|---|
|
루프에 부여된 고유 이름입니다. 동일한 단계의 다른 루프 이름과 비교할 때 고유해야 합니다. |
String |
No |
"" |
|
구성 문자열이 공통 구분 문자로 연결된 문자열로 구성된 문자열입니다. 체인 표현식도 사용할 수 있습니다. 체인 표현식의 경우 YAML컴파일러의 올바른 해석을 위해 큰따옴표로 묶어야 합니다. | String |
예 |
해당 사항 없음 |
|
블록 내에서 문자열을 구분하는 데 사용되는 문자입니다. 기본값은 쉼표 문자입니다. 지정된 목록에서 구분자를 하나만 사용할 수 있습니다.
체인 표현식은 사용할 수 없습니다. |
String | No | 쉼표: "," |
참고
list
의 값은 변경할 수 없는 문자열로 취급됩니다. 런타임 중에 list
소스가 변경된 경우, 실행 중에는 반영되지 않습니다.
구분된 목록이 있는 forEach
루프 예제 1
이 예제에서는 다음 체인 표현식 패턴을 사용하여 다른 단계의 출력(<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
루프 예제 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 }}"
단계 필드
루프는 단계의 일부입니다. 단계 실행과 관련된 모든 필드는 개별 반복에 적용되지 않습니다. 단계 필드는 다음과 같이 단계 수준에서만 적용됩니다.
-
timeoutSeconds – 루프의 모든 반복은이 필드에 지정된 기간 내에 실행되어야 합니다. 루프 실행 시간이 초과되면는 단계의 재시도 정책을 AWSTOE 실행하고 새 시도마다 제한 시간 파라미터를 재설정합니다. 최대 재시도 횟수에 도달한 후 루프 실행이 제한 시간 값을 초과하면, 루프 실행 시간이 초과되었다는 내용의 단계 실패 메시지가 나타납니다.
-
onFailure – 실패 처리는 다음과 같이 단계에 적용됩니다.
-
onFailure가 로 설정된 경우
Abort
는 루프를 AWSTOE 종료하고 재시도 정책에 따라 단계를 재시도합니다. 최대 재시도 횟수가 지나면는 현재 단계를 실패로 AWSTOE 표시하고 프로세스 실행을 중지합니다.AWSTOE 는 상위 단계 및 문서의 상태 코드를 로 설정합니다
Failed
.참고
실패한 단계 이후에는 더 이상 단계가 실행되지 않습니다.
-
이 AWSTOE 로 설정된 경우 onFailure는 루프를
Continue
종료하고 재시도 정책에 따라 단계를 재시도합니다. 최대 재시도 횟수가 지나면는 현재 단계를 실패로 AWSTOE 표시하고 다음 단계를 계속 실행합니다.AWSTOE 는 상위 단계 및 문서의 상태 코드를 로 설정합니다
Failed
. -
onFailure가 AWSTOE 로 설정된 경우는 루프를
Ignore
종료하고 재시도 정책에 따라 단계를 재시도합니다. 최대 재시도 횟수가 지나면는 현재 단계를 로 AWSTOE 표시하고 다음 단계를IgnoredFailure
계속 실행합니다.AWSTOE 는 상위 단계 및 문서의 상태 코드를 로 설정합니다
SuccessWithIgnoredFailure
.참고
이는 여전히 성공적인 실행으로 간주되지만 하나 이상의 단계가 실패하여 무시되었음을 알려주는 정보가 포함되어 있습니다.
-
maxAttempts – 재시도할 때마다 처음부터 전체 단계와 모든 반복이 실행됩니다.
status –
status
단계 실행의 전체 상태에서 개별 반복의 상태를 나타내지는 않습니다. 루프가 있는 단계의 상태는 다음과 같이 결정합니다.단일 반복 실행에 실패할 경우, 단계 상태는 실패로 표시됩니다.
모든 반복이 성공하면, 단계 상태가 성공으로 표시됩니다.
startTime - 단계 실행의 전체 시작 시간입니다. 개별 반복의 시작 시간을 나타내지 않습니다.
endTime - 단계 실행의 전체 종료 시간입니다. 개별 반복의 종료 시간을 나타내지 않습니다.
failureMessage - 시간 초과가 아닌 오류가 발생할 경우 실패한 반복 인덱스를 포함합니다. 시간 초과 오류가 발생한 경우, 루프 실행이 실패했다는 메시지가 표시됩니다. 실패 메시지의 크기를 최소화하기 위해 각 반복에 대한 개별 오류 메시지는 제공되지 않습니다.
단계별 및 반복 출력
모든 반복에는 출력값이 포함됩니다. 루프 실행이 끝나면는에서 성공한 모든 반복 출력을 AWSTOE 통합합니다detailedOutput.json
. 통합 출력은 작업 모듈의 출력 스키마에 정의된 해당 출력 키에 속하는 값을 정렬한 것입니다. 다음 예에서는 출력이 통합되는 방법을 보여줍니다.
반복 1에 ExecuteBash
에 대한 출력
{ "stdout":"Hello" }
반복 2에 ExecuteBash
에 대한 출력
{ "stdout":"World" }
단계에 ExecuteBash
에 대한 출력
{ "stdout":"Hello\nWorld" }
예를 들어, ExecuteBash
, ExecutePowerShell
, ExecuteBinary
에서 작업 모듈 출력으로 STDOUT
(을)를 반환하는 작업 모듈입니다. STDOUT
메시지는 새 줄 문자와 결합되어 detailedOutput.json
단계의 전체 출력을 생성합니다.
AWSTOE 는 실패한 반복의 출력을 통합하지 않습니다.