Controlar a ordem de execução num fluxo de trabalho

Esta página mostra como usar saltos ou ciclos for para controlar a ordem em que os passos do fluxo de trabalho são executados. Os saltos básicos permitem-lhe definir o passo que o fluxo de trabalho executa a seguir. Os saltos condicionais baseiam-se nos saltos básicos e permitem-lhe usar expressões condicionais para controlar a ordem de execução através de um fluxo de trabalho. Por exemplo, pode executar determinados passos apenas quando uma variável ou uma resposta de outro passo do fluxo de trabalho cumpre critérios específicos.

Os exemplos nesta página usam uma API de exemplo que devolve 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. Verify 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. Verify that billing is enabled for your Google Cloud project.

  6. Já deve ter um fluxo de trabalho existente no qual quer alterar a ordem de execução. Para saber como criar e implementar um fluxo de trabalho, consulte o artigo Crie e atualize um fluxo de trabalho.
  7. Use saltos para alterar a ordem de execução

    Por predefinição, todos os fluxos de trabalho são listas ordenadas em que cada passo é executado pela ordem que define no código fonte do fluxo de trabalho. Pode optar por substituir esta ordem predefinida através de saltos.

    Saltos básicos

    Pode especificar o passo a executar a seguir num fluxo de trabalho através de saltos básicos.

    Consola

    1. Abra a página Fluxos de trabalho na Google Cloud consola:
      aceda a Fluxos de trabalho

    2. Selecione o nome do fluxo de trabalho no qual quer alterar a ordem de execução dos passos existentes.

    3. Na página Editar fluxo de trabalho, selecione Seguinte para aceder ao editor do fluxo de trabalho.

    4. Adicione o campo next no final de um passo para indicar ao fluxo de trabalho que deve saltar para um passo específico:

      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 do passo que quer que o fluxo de trabalho execute a seguir. Por exemplo, next_step.

    5. Selecione Implementar.

    gcloud

    1. Abra o ficheiro de definição do fluxo de trabalho no editor de texto à sua escolha.

    2. Adicione o campo next no final de um passo para indicar ao fluxo de trabalho que deve saltar para um passo específico:

      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 do passo que quer que o fluxo de trabalho execute a seguir. Por exemplo, next_step.

    3. Guarde o ficheiro de fluxo de trabalho.

    4. Para implementar o fluxo de trabalho, introduza o seguinte comando:

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

      Substitua o seguinte:

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

      • WORKFLOW_FILE.YAML: obrigatório. O ficheiro de origem para o fluxo de trabalho.

    Exemplo

    Por exemplo, o fluxo de trabalho seguinte tem os passos 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, foram adicionados campos next aos passos get_daylight_savings_bool e return_daylight_savings_bool para que os passos sejam executados pela 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

    Pode usar saltos condicionais para determinar que passo executar a seguir num fluxo de trabalho. Os saltos condicionais usam blocos switch, que saltam para um passo especificado se uma condição específica for cumprida. Cada bloco switch pode incluir um máximo de 50 condições.

    Consola

    1. Abra a página Fluxos de trabalho na Google Cloud consola:
      aceda a Fluxos de trabalho

    2. Selecione o nome do fluxo de trabalho ao qual quer adicionar um bloco switch.

    3. Na página Editar fluxo de trabalho, selecione Seguinte para aceder ao editor do fluxo de trabalho.

    4. Na página Definir fluxo de trabalho, é apresentada a definição atual do fluxo de trabalho. Para editar o fluxo de trabalho de modo que execute um determinado passo com base numa declaração condicional, adicione um passo 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 o seguinte:

      • SWITCH_STEP_NAME: o nome do passo que contém o bloco switch.

      • EXPRESSION_ONE: a primeira expressão a avaliar. Se esta expressão for avaliada como verdadeira, o fluxo de trabalho executa o passo STEP_A seguinte. Se esta expressão for avaliada como falsa, o fluxo de trabalho avalia a expressão seguinte.

      • EXPRESSION_TWO: a segunda expressão a avaliar. Se esta expressão for avaliada como verdadeira, o fluxo de trabalho executa o passo STEP_B seguinte. Se esta expressão for avaliada como falsa, o fluxo de trabalho executa STEP_C.

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

    5. Selecione Implementar.

    gcloud

    1. Abra a definição do fluxo de trabalho no editor de texto à sua escolha.

    2. Para editar o fluxo de trabalho de modo que execute um determinado passo com base numa declaração condicional, adicione um passo 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 o seguinte:

      • SWITCH_STEP_NAME: o nome do passo que contém o bloco switch.

      • EXPRESSION_ONE: a primeira expressão a avaliar. Se esta expressão for avaliada como verdadeira, o fluxo de trabalho executa o passo STEP_A seguinte. Se esta expressão for avaliada como falsa, o fluxo de trabalho avalia a expressão seguinte.

      • EXPRESSION_TWO: a segunda expressão a avaliar. Se esta expressão for avaliada como verdadeira, o fluxo de trabalho executa o passo STEP_B seguinte. Se esta expressão for avaliada como falsa, o fluxo de trabalho executa STEP_C.

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

    3. Guarde o ficheiro de fluxo de trabalho.

    4. Para implementar o fluxo de trabalho, introduza o seguinte comando:

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

      Substitua o seguinte:

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

      • WORKFLOW_FILE.YAML: obrigatório. O ficheiro de origem para o fluxo de trabalho.

    Exemplo

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

    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 por ordem e, se o resultado da expressão da condição for true, é chamado o passo next dessa condição. Se nenhuma das condições for cumprida, o fluxo de trabalho chama o passo especificado pelo campo next fora do bloco switch, que, neste exemplo, é o passo workWeek.

    Por exemplo, se o dia da semana for "Saturday", o fluxo de trabalho passa para o passo weekend e devolve a mensagem "It's the weekend!". O fluxo de trabalho não executa o passo friday porque o salto condicional o ignora e o fluxo de trabalho não executa o passo workWeek porque return interrompe a execução do fluxo de trabalho no final do passo weekend.

    Use os ciclos for para iterar

    Pode usar ciclos for para iterar uma sequência de números ou uma coleção de dados, como uma lista ou um mapa.

    Pode percorrer todos os itens numa lista ou num mapa através da iteração baseada em itens. Se tiver um intervalo específico de valores numéricos para iterar, pode usar a iteração baseada em intervalos.

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

    O que se segue?