반복문을 사용하여 리스트, 맵 또는 컬렉션을 순회합니다.
루프는 in 으로 정의된 컬렉션을 순회하며, 각 순회마다 index 및 element 변수를 자동으로 생성합니다. JQ 표현식 ${{ .steps.<loopStepName>.loop.element }} 또는 ${{ .steps.<loopStepName>.loop.index }} 를 사용하여 이에 액세스합니다.
반복문이 가능하게 하는 것:
- 컬렉션, 리스트 또는 기타 항목을 순회합니다.
- 각 항목을
element으로 처리하고index변수를 사용하여 위치를 추적합니다. break및continue문을 사용하여 제어 루프 흐름을 조정합니다.- 복잡한 데이터 처리를 위한 중첩 루프
매개변수
for(필수): 신호 루프 시작in(필수, 문자열 표현식): 컬렉션으로 평가되는 표현식steps(필수): 각 반복마다 실행되는 단계입니다. 중첩 루프를 포함한 모든 단계 유형을 포함할 수 있습니다.
흐름 입력이 포함된 루프
name: myWorkflow steps: - name: loopStep type: loop for: in: '${{ .workflowInputs.list }}' steps: - name: step1 type: action action: internal.example.sayHello version: '1' inputs: name: 'Element: ${{ .steps.loopStep.loop.element }}, Index: ${{ .steps.loopStep.loop.index }}'중요 사항
for: 필수의. 루프 시작을 나타내는 최상위 요소in: 필수의. 입력 컬렉션은 제외로 캐스팅 가능해야 합니다.steps: 필수의. 각 반복마다 단계가 실행됩니다.element그리고index루프 반복마다 자동으로 할당됩니다.index0부터 시작합니다.element복잡한 컬렉션의 경우 복합 유형일 수 있습니다.- 루프 변수와 단계별 출력은 루프 내에서만 접근 가능합니다.
- 변수는 루프 종료 시 초기화되며, 루프 외부에서 접근하면 null이 됩니다.
- 반복문은 반복문 외부에서 정의된 변수에 접근할 수 있습니다.
정수에 대한 간단한 반복문
name: myWorkflow steps: - name: loopStep type: loop for: in: ${{ [range(1; 6)] }} steps: - name: step1 type: action action: internal.example.sayHello version: '1' inputs: name: 'Element: ${{ .steps.loopStep.loop.element }}, Index: ${{ .steps.loopStep.loop.index }}'지도를 위한 간단한 루프
name: myWorkflow steps: - name: loopStep type: loop for: in: '${{ [ { "key1": "val1" }, { "key2": "val2"} ] }}' steps: - name: step1 type: action action: internal.example.sayHello version: '1' inputs: name: 'Element: ${{ .steps.loopStep.loop.element }}, Index: ${{ .steps.loopStep.loop.index }}'루프 내에서 점프
동일한 루프 내에서만 이름이 지정된 단계로 이동할 수 있습니다. 루프 안팎으로 이동하거나, 내부 루프 또는 외부 루프로 이동하거나, 서로 다른 루프 사이를 이동하는 것은 허용되지 않습니다.
name: myWorkflow steps: - name: firstStep type: action action: internal.example.sayHello version: '1' - name: loopStep type: loop for: in: '${{ .workflowInputs.list }}' steps: - name: step1 type: action action: internal.example.sayHello version: '1' inputs: name: '${{ .steps.loopStep.loop.element }}' next: step3 # Okay within the loop - name: step2 type: action action: internal.example.sayHello version: '1' inputs: name: '${{ .steps.step1.outputs.greeting }}' - name: step3 type: action action: internal.example.sayHello version: '1' next: firstStep # Not okay, first step is not in the loop context루프에서 break/continue를 사용하세요
next: break 또는 next: continue 사용하여 루프 흐름을 변경합니다. 이것들은 루프 내에서 암묵적으로 정의된 예약된 점프 타겟, 목표입니다. 루프 밖에서는 워크플로우 끝으로 점프합니다.
end 루프 내부에서는 break 처럼 동작합니다. next 스위치 단계 또는 모든 단계 유형에서 작동합니다.
name: myWorkflow steps: - name: loopStep type: loop for: in: '${{ [range(1; 6)] }}' steps: - name: insideLoopStep1 type: action action: internal.example.sayHello version: '1' inputs: name: '${{ .steps.loopStep.loop.element }}' next: continue - name: insideLoopStep2 type: action action: internal.example.sayHello version: '1' inputs: name: '${{ .steps.loopStep.loop.element }}' - name: loopStepAgain type: loop for: in: '${{ .workflowInputs.list }}' steps: - name: switchStep type: switch switch: - condition: '${{ .steps.loopStepAgain.loop.index >= 0 }}' next: break - name: insideLoopStepAgain type: action action: internal.example.sayHello version: '1' inputs: name: '${{ .steps.loopStepAgain.loop.element }}'무엇 향후 계획
- 조건 논리: 의사 결정을 위해 switch 문을 사용하세요.
- REST API 폴링: 실제 API를 통해 루프가 어떻게 작동하는지 살펴보세요