Iterar por listas, mapas ou coleções usando loops.
Os loops iteram sobre coleções definidas por in, criando automaticamente variáveis index e element para cada iteração. Acesse-os com a expressão JQ ${{ .steps.<loopStepName>.loop.element }} ou ${{ .steps.<loopStepName>.loop.index }}.
O que os loops permitem:
- Iterar sobre coleções, listas ou arrays
- Processar cada item com
elemente rastrear a posição com as variáveisindex - Fluxo do loop de controle com as instruções
breakecontinue - Aninhar loops para processamento de dados complexos
Parâmetro
for(Obrigatório): Sinaliza o início do loopin(Obrigatório, expressão de string): Expressão que avalia uma coleçãosteps(Obrigatório): Etapas executadas em cada iteração. Pode incluir qualquer tipo de etapa, incluindo loops aninhados
Iterar com entradas de fluxo de trabalho
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 }}'Notas importantes
for: obrigatório. Elemento de nível superior indicando o início do loopin: obrigatório. A coleção de entrada deve ser conversível para Java Arraysteps: obrigatório. As etapas executam cada iteraçãoelementeindexatribuído automaticamente por iteração de loopindexé de base zeroelementpode ser um tipo complexo para coleções complexas- Variáveis de loop e saídas de etapa só podem ser acessadas dentro do loop
- Variáveis limpas na saída do loop e nulas se acessadas externamente
- Os loops podem acessar variáveis definidas fora do loop.
Loop simples em inteiros
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 }}'Loop simples para mapa
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 }}'Saltar dentro de um loop
Apenas pule entre as etapas nomeadas dentro do mesmo loop. Não é permitido pular para dentro/fora de loops, para loops internos/externos ou entre loops diferentes.
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 contextUse break/continue em um loop.
Alterar o fluxo do loop com next: break ou next: continue. Estes são destinos de salto reservados implicitamente definidos dentro de loops. Fora dos loops, eles saltam para o fim do fluxo de trabalho.
end comporta-se como break dentro de loops. next funciona em etapas de switch ou qualquer tipo de etapa.
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 }}'Qual é o próximo
- Lógica condicional: Use instruções switch para tomada de decisão
- Pesquisa de API REST: Veja os loops em ação com APIs reais