Controlar a ordem de execução em um fluxo de trabalho

Nesta página, mostramos como usar saltos ou repetições para controlar a ordem em que as etapas do fluxo de trabalho são executadas. Os saltos básicos permitem definir qual etapa do fluxo de trabalho será executada a seguir. Os saltos condicionais complementam os saltos básicos, permitindo usar expressões condicionais para controlar a ordem de execução por um fluxo de trabalho. Por exemplo, é possível executar determinadas etapas somente quando uma variável ou resposta de outra etapa do fluxo de trabalho atende a critérios específicos.

Os exemplos desta página usam uma API de amostra que retorna o dia da semana.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Para alterar a ordem de execução, você precisa ter um fluxo de trabalho. Para saber como criar e implantar um fluxo de trabalho, consulte Criar e atualizar um fluxo de trabalho.

Usar saltos para alterar a ordem de execução

Por padrão, todos os fluxos de trabalho são listas ordenadas em que cada etapa é executada na ordem definida no código-fonte do fluxo de trabalho. Para modificar essa ordem padrão, use saltos.

Saltos básicos

Use saltos básicos para especificar qual etapa será executada a seguir em um fluxo de trabalho.

Console

  1. Abra a página "Fluxos de trabalho" no Console do Google Cloud:
    Acessar fluxos de trabalho

  2. Selecione o nome do fluxo de trabalho em que você quer alterar a ordem atual de execução das etapas.

  3. Na página Editar fluxo de trabalho, selecione Avançar para acessar o editor de fluxo de trabalho.

  4. Adicione o campo next ao final de uma etapa para instruir o fluxo de trabalho a pular para uma etapa específica:

    YAML

         - step_a:
             ...
             next: STEP_NAME_TO_JUMP_TO
         - step_b:
             ...
         - next_step:
             ...

    JSON

        [
          {
            "step_a": {
              ...
              "next": "STEP_NAME_TO_JUMP_TO"
            }
          }
          {
            "step_b": {
              ...
            }
          }
          {
            "next_step": {
              ...
            }
          }
        ]

    Substitua STEP_NAME_TO_JUMP_TO pelo nome da próxima etapa que você quer que o fluxo de trabalho execute. Exemplo, next_step

  5. Selecione Implantar.

gcloud

  1. Abra o arquivo de definição do fluxo de trabalho no editor de texto de sua preferência.

  2. Adicione o campo next ao final de uma etapa para instruir o fluxo de trabalho a pular para uma etapa específica:

    YAML

         - step_a:
             ...
             next: STEP_NAME_TO_JUMP_TO
         - step_b:
             ...
         - next_step:
             ...

    JSON

      [
        {
          "step_a": {
            ...
            "next": "STEP_NAME_TO_JUMP_TO"
          }
        }
        {
          "step_b": {
            ...
          }
        }
        {
          "next_step": {
            ...
          }
        }
      ]

    Substitua STEP_NAME_TO_JUMP_TO pelo nome da etapa que você quer que o fluxo de trabalho execute em seguida. Por exemplo, next_step.

  3. Salve o arquivo do fluxo de trabalho.

  4. Para implantar o fluxo de trabalho, digite o seguinte comando:

    gcloud workflows deploy WORKFLOW_NAME \
    --source=WORKFLOW_FILE.YAML

    Substitua:

    • WORKFLOW_NAME: obrigatório. O nome do fluxo de trabalho.

    • WORKFLOW_FILE.YAML: obrigatório. O arquivo de origem do fluxo de trabalho.

Exemplo

Por exemplo, o fluxo de trabalho a seguir tem etapas fora de ordem:

YAML

  - get_time:
     call: http.get
     args:
         url:  https://us-central1-workflowsample.cloudfunctions.net/datetime
     result: currentTime
  - return_daylight_savings_bool:
     return: ${daylightSavings}
  - get_daylight_savings_bool:
     assign:
         - daylightSavings: ${currentTime.body.isDayLightSavingsTime}

JSON

    [
      {
        "get_time": {
          "call": "http.get",
          "args": {
            "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime"
          },
          "result": "currentTime"
        }
      },
      {
        "return_daylight_savings_bool": {
          "return": "${daylightSavings}"
        }
      },
      {
        "get_daylight_savings_bool": {
          "assign": [
            {
              "daylightSavings": "${currentTime.body.isDayLightSavingsTime}"
            }
          ]
        }
      }
    ]

Neste exemplo, os campos next foram adicionados às etapas get_daylight_savings_bool e return_daylight_savings_bool para que sejam executadas na ordem correta:

YAML

  - get_time:
     call: http.get
     args:
         url:  https://us-central1-workflowsample.cloudfunctions.net/datetime
     result: currentTime
     next: get_daylight_savings_bool
  - return_daylight_savings_bool:
     return: ${daylightSavings}
  - get_daylight_savings_bool:
     assign:
         - daylightSavings: ${currentTime.body.isDayLightSavingsTime}
     next: return_daylight_savings_bool

JSON

    [
      {
        "get_time": {
          "call": "http.get",
          "args": {
            "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime"
          },
          "result": "currentTime",
          "next": "get_daylight_savings_bool"
        }
      },
      {
        "return_daylight_savings_bool": {
          "return": "${daylightSavings}"
        }
      },
      {
        "get_daylight_savings_bool": {
          "assign": [
            {
              "daylightSavings": "${currentTime.body.isDayLightSavingsTime}"
            }
          ],
          "next": "return_daylight_savings_bool"
        }
      }
    ]

Saltos condicionais

Use saltos condicionais para determinar qual etapa será executada a seguir em um fluxo de trabalho. Os saltos condicionais usam blocos switch, que pularão para um passo especificado se uma condição específica for atendida. Cada bloco switch pode incluir no máximo 50 condições.

Console

  1. Abra a página "Fluxos de trabalho" no Console do Google Cloud:
    Acessar fluxos de trabalho

  2. Selecione o nome do fluxo de trabalho a que você quer adicionar um bloco switch.

  3. Na página Editar fluxo de trabalho, selecione Avançar para acessar o editor de fluxo de trabalho.

  4. A definição atual do fluxo de trabalho é exibida na página Definir fluxo de trabalho. Para editar o fluxo de trabalho para que ele execute uma determinada etapa com base em uma instrução condicional, adicione uma etapa que use um bloco switch:

    YAML

         - SWITCH_STEP_NAME:
             switch:
                 - condition: ${EXPRESSION_ONE}
                   next: STEP_A
                 - condition: ${EXPRESSION_TWO}
                   next: STEP_B
                 ...
             next: STEP_C
         - STEP_A
             ...
         - STEP_B
             ...
         - STEP_C
             ...

    JSON

        [
          {
            "SWITCH_STEP_NAME": {
              "switch": [
                {
                  "condition": "${EXPRESSION_ONE}",
                  "next": "STEP_A"
                },
                {
                  "condition": "${EXPRESSION_TWO}",
                  "next": "STEP_B"
                }
              ],
              "next": "STEP_C"
            }
            "STEP_A": {
              ...
            }
            "STEP_B": {
              ...
            }
            "STEP_C": {
              ...
            }
          }
        ]

    Substitua:

    • SWITCH_STEP_NAME: o nome da etapa. que contém o bloco switch.

    • EXPRESSION_ONE: a primeira expressão a ser avaliar. Se essa expressão for avaliada como verdadeira, o fluxo de trabalho vai executar STEP_A em seguida. Se esta expressão for avaliada como falsa, o fluxo de trabalho avalia a próxima expressão.

    • EXPRESSION_TWO: a segunda expressão a ser avaliada. Se essa expressão for avaliada como verdadeira, o fluxo de trabalho será executado STEP_B a seguir. Se esta expressão for avaliada como falsa, o fluxo de trabalho executa STEP_C.

    • STEP_A, STEP_B. STEP_C: nomes das etapas do marcador de posição.

  5. Selecione Implantar.

gcloud

  1. Abra a definição do fluxo de trabalho no editor de texto de sua preferência.

  2. Para editar o fluxo de trabalho para que ele execute uma determinada etapa com base em uma instrução condicional, adicione uma etapa que use um bloco switch:

    YAML

     - SWITCH_STEP_NAME:
         switch:
             - condition: ${EXPRESSION_ONE}
               next: STEP_A
             - condition: ${EXPRESSION_TWO}
               next: STEP_B
             ...
         next: STEP_C
     - STEP_A
         ...
     - STEP_B
         ...
     - STEP_C
         ...

    JSON

    [
      {
        "SWITCH_STEP_NAME": {
          "switch": [
            {
              "condition": "${EXPRESSION_ONE}",
              "next": "STEP_A"
            },
            {
              "condition": "${EXPRESSION_TWO}",
              "next": "STEP_B"
            }
          ],
          "next": "STEP_C"
        }
        "STEP_A": {
          ...
        }
        "STEP_B": {
          ...
        }
        "STEP_C": {
          ...
        }
      }
    ]
      

    Substitua:

    • SWITCH_STEP_NAME: o nome da etapa. que contém o bloco switch.

    • EXPRESSION_ONE: a primeira expressão a ser avaliar. Se essa expressão for avaliada como verdadeira, o fluxo de trabalho vai executar STEP_A em seguida. Se esta expressão for avaliada como falsa, o fluxo de trabalho avalia a próxima expressão.

    • EXPRESSION_TWO: a segunda expressão a ser avaliada. Se essa expressão for avaliada como verdadeira, o fluxo de trabalho será executado STEP_B a seguir. Se esta expressão for avaliada como falsa, o fluxo de trabalho executa STEP_C.

    • STEP_A, STEP_B, STEP_C: nomes de etapas de marcador de posição.

  3. Salve o arquivo do fluxo de trabalho.

  4. Para implantar o fluxo de trabalho, digite o seguinte comando:

    gcloud workflows deploy WORKFLOW_NAME \
    --source=WORKFLOW_FILE.YAML

    Substitua:

    • WORKFLOW_NAME: obrigatório. O nome do fluxo de trabalho.

    • WORKFLOW_FILE.YAML: obrigatório. O arquivo de origem do fluxo de trabalho.

Exemplo

Por exemplo, este fluxo de trabalho usa um bloco de troca para controlar a ordem de execução:

YAML

  - getCurrentTime:
      call: http.get
      args:
          url:  https://us-central1-workflowsample.cloudfunctions.net/datetime
      result: currentTime
  - conditionalSwitch:
      switch:
          - condition: ${currentTime.body.dayOfTheWeek == "Friday"}
            next: friday
          - condition: ${currentTime.body.dayOfTheWeek == "Saturday" OR currentTime.body.dayOfTheWeek == "Sunday"}
            next: weekend
      next: workWeek
  - friday:
      return: "It's Friday! Almost the weekend!"
  - weekend:
      return: "It's the weekend!"
  - workWeek:
      return: "It's the work week."
    

JSON

    [
      {
        "getCurrentTime": {
          "call": "http.get",
          "args": {
            "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime"
          },
          "result": "currentTime"
        }
      },
      {
        "conditionalSwitch": {
          "switch": [
            {
              "condition": "${currentTime.body.dayOfTheWeek == "Friday"}",
              "next": "friday"
            },
            {
              "condition": "${currentTime.body.dayOfTheWeek == "Saturday" OR currentTime.body.dayOfTheWeek == "Sunday"}",
              "next": "weekend"
            }
          ],
          "next": "workWeek"
        }
      },
      {
        "friday": {
          "return": "It's Friday! Almost the weekend!"
        }
      },
      {
        "weekend": {
          "return": "It's the weekend!"
        }
      },
      {
        "workWeek": {
          "return": "It's the work week."
        }
      }
    ]
      

Neste exemplo, o bloco switch tem duas condições. O analisador avalia cada condição na ordem. Se o resultado da expressão da condição for true, a etapa next dessa condição será chamada. Se nenhuma das condições for atendida, o fluxo de trabalho chamará a etapa especificada pelo campo next fora do bloco switch, que neste exemplo é a etapa workWeek.

Por exemplo, se o dia da semana for "Saturday", o fluxo de trabalho pulará para a etapa weekend e retornará a mensagem "It's the weekend!". O fluxo de trabalho não executa a etapa friday porque ela é pulada no salto condicional e o fluxo de trabalho não executa a etapa workWeek porque return interrompe a execução do fluxo de trabalho ao final da etapa weekend.

Usar repetições for para iterar

Use repetições for para iterar uma sequência de números ou por meio de uma coleção de dados, como uma lista ou um mapa.

É possível percorrer todos os itens em uma lista ou mapa usando a iteração baseada em item. Se você tiver um intervalo específico de valores numéricos para iterar, use a iteração baseada em intervalo.

Para mais informações e exemplos, consulte a referência de sintaxe na iteração.

A seguir