Controla el orden de ejecución en un flujo de trabajo

En esta página, se muestra cómo usar saltos o bucles for para controlar el orden en que se ejecutan los pasos de tu flujo de trabajo. Los saltos básicos te permiten definir qué paso el flujo de trabajo se ejecutará a continuación. Los saltos condicionales se basan en los saltos básicos, lo que te permite usar expresiones condicionales para controlar el orden de ejecución a través de un flujo de trabajo. Por ejemplo, puedes ejecutar ciertos pasos solo cuando una variable o respuesta de otro paso del flujo de trabajo cumple con criterios específicos.

En los ejemplos de esta página, se usa una API de ejemplo que muestra el día de la semana.

Antes de comenzar

  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. Ya deberías tener un flujo de trabajo existente en el que quieras cambiar orden de ejecución. Para obtener información sobre cómo crear e implementar un flujo de trabajo, consulta Crea y actualiza un flujo de trabajo.

Usa saltos para cambiar el orden de ejecución

De forma predeterminada, todos los flujos de trabajo son listas ordenadas en las que cada paso se ejecuta en el orden que definas en el código fuente del flujo de trabajo. Puedes anular este orden predeterminado con saltos.

Saltos básicos

Puedes especificar qué paso ejecutar a continuación en un flujo de trabajo con saltos básicos.

Console

  1. Abre la página Workflows en la Consola de Google Cloud:
    Ir a Workflows

  2. Selecciona el nombre del flujo de trabajo en el que deseas cambiar el orden de la ejecución de los pasos existentes.

  3. En la página Editar flujo de trabajo, selecciona Siguiente para ir al editor de flujo de trabajo.

  4. Agrega el campo next al final de un paso para indicarle al flujo de trabajo que salte a un paso en particular:

    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": {
              ...
            }
          }
        ]

    Reemplaza STEP_NAME_TO_JUMP_TO por el nombre. del paso que deseas que el flujo de trabajo ejecute a continuación. Por ejemplo, next_step.

  5. Selecciona Implementar.

gcloud

  1. Abre el archivo de definición de tu flujo de trabajo en el editor de texto que prefieras.

  2. Agrega el campo next al final de un paso para indicarle al flujo de trabajo que salte a un paso en particular:

    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": {
            ...
          }
        }
      ]

    Reemplaza STEP_NAME_TO_JUMP_TO por el nombre del paso que deseas que ejecute el flujo de trabajo a continuación. Por ejemplo, next_step

  3. Guarda el archivo de flujo de trabajo.

  4. Para implementar el flujo de trabajo, ingresa el siguiente comando:

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

    Reemplaza lo siguiente:

    • WORKFLOW_NAME: Obligatorio. El nombre de tu en el flujo de trabajo.

    • WORKFLOW_FILE.YAML: obligatorio. Es el archivo fuente del flujo de trabajo.

Ejemplo

Por ejemplo, el siguiente flujo de trabajo tiene sus pasos desordenados:

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}"
            }
          ]
        }
      }
    ]

En este ejemplo, se agregaron campos next a get_daylight_savings_bool. y return_daylight_savings_bool para que se ejecuten en la orden correcto:

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 condicionales

Puedes usar saltos condicionales para determinar qué paso ejecutar a continuación en un flujo de trabajo. Los saltos condicionales usan bloques switch, que saltan a un paso especificado si se cumple una condición en particular. Cada bloque switch puede incluir un máximo de 50 condiciones.

Console

  1. Abre la página Workflows en la Consola de Google Cloud:
    Ir a Workflows

  2. Selecciona el nombre del flujo de trabajo al que deseas agregar un bloque switch.

  3. En la página Editar flujo de trabajo, selecciona Siguiente para ir al editor de flujo de trabajo.

  4. En la página Define el flujo de trabajo, se muestra la definición actual de tu flujo de trabajo. Para editar el flujo de trabajo de modo que ejecute un paso determinado según una sentencia condicional, agrega un paso que use un bloque 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": {
              ...
            }
          }
        ]

    Reemplaza lo siguiente:

    • SWITCH_STEP_NAME: Es el nombre del paso. que contiene el bloque switch.

    • EXPRESSION_ONE: Es la primera expresión que se debe evaluar. Si esta expresión se evalúa como verdadera, el flujo de trabajo se ejecuta STEP_A a continuación. Si esta expresión se evalúa como falsa, el flujo de trabajo evalúa la siguiente expresión.

    • EXPRESSION_TWO: Es la segunda expresión a a evaluar. Si esta expresión se evalúa como verdadera, el flujo de trabajo se ejecuta STEP_B a continuación. Si esta expresión se evalúa como falsa, el flujo de trabajo ejecuta STEP_C.

    • STEP_A, STEP_B, STEP_C: Son los nombres de los pasos del marcador de posición.

  5. Selecciona Implementar.

gcloud

  1. Abre la definición de tu flujo de trabajo en el editor de texto que prefieras.

  2. Editar el flujo de trabajo para que ejecute un paso determinado basado en un sentencia condicional, agrega un paso que use un bloque 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": {
          ...
        }
      }
    ]
      

    Reemplaza lo siguiente:

    • SWITCH_STEP_NAME: Es el nombre del paso. que contiene el bloque switch.

    • EXPRESSION_ONE: Es la primera expresión que se debe evaluar. Si esta expresión se evalúa como verdadera, el flujo de trabajo se ejecuta STEP_A a continuación. Si esta expresión se evalúa como falsa, el flujo de trabajo evalúa la siguiente expresión.

    • EXPRESSION_TWO: Es la segunda expresión a a evaluar. Si esta expresión se evalúa como verdadera, el flujo de trabajo se ejecuta STEP_B a continuación. Si esta expresión se evalúa como falsa, el flujo de trabajo ejecuta STEP_C.

    • STEP_A, STEP_B, STEP_C: Son los nombres de los pasos de marcador de posición.

  3. Guarda el archivo del flujo de trabajo.

  4. Para implementar el flujo de trabajo, ingresa el siguiente comando:

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

    Reemplaza lo siguiente:

    • WORKFLOW_NAME: Obligatorio. El nombre de tu en el flujo de trabajo.

    • WORKFLOW_FILE.YAML: obligatorio. Es el archivo fuente del flujo de trabajo.

Ejemplo

Por ejemplo, este flujo de trabajo usa un bloque de interruptores para controlar la configuración orden de ejecución:

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."
        }
      }
    ]
      

En este ejemplo, el bloque switch tiene dos condiciones. El analizador evalúa cada condición en orden, y si el resultado de la expresión de la condición es true, se llama al paso next de esa condición. Si no se cumple ninguna de las condiciones, el flujo de trabajo llama al paso especificado por el campo next fuera del bloque switch, que, en este ejemplo, es el paso workWeek.

Por ejemplo, si el día de la semana es "Saturday", el flujo de trabajo salta a el paso weekend y muestra el mensaje "It's the weekend!". El flujo de trabajo No ejecuta el paso friday porque el salto condicional lo omite, y el flujo de trabajo no ejecuta el paso workWeek porque return detiene la la ejecución del flujo de trabajo al final del paso weekend.

Usa bucles for para iterar

Puedes usar bucles for para iterar sobre una secuencia de números o a través de una recopilación de datos, como una lista o un mapa.

Puedes recorrer cada elemento de una lista o un mapa con la iteración basada en elementos. Si tienes un rango específico de valores numéricos para iterar, puedes usar la iteración basada en rangos.

Para obtener más información y ejemplos, consulta la referencia de sintaxis sobre iteración.

¿Qué sigue?