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 en qué paso se ejecutará el flujo de trabajo 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 deseas cambiar el 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 defines en el código fuente del flujo de trabajo. Puedes anular este orden predeterminado con saltos.

Saltos básicos

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

Console

  1. Abre la página Workflows en la console de Google Cloud:
    Ir a Flujos de trabajo

  2. Selecciona el nombre del flujo de trabajo en el que deseas cambiar el orden de 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. Es el nombre de tu flujo de trabajo.

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

Ejemplo

Por ejemplo, el siguiente flujo de trabajo tiene los 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 los pasos get_daylight_savings_bool y return_daylight_savings_bool para que se ejecuten en el 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 console de Google Cloud:
    Ir a Flujos de trabajo

  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 ejecutará 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 que se debe evaluar. Si esta expresión se evalúa como verdadera, el flujo de trabajo ejecutará 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.

  5. Selecciona Implementar.

gcloud

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

  2. 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 ejecutará 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 que se debe evaluar. Si esta expresión se evalúa como verdadera, el flujo de trabajo ejecutará 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 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. Es el nombre de tu 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 el orden de ejecución del flujo de trabajo:

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 al 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 no ejecuta el paso workWeek porque return detiene 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 el rango.

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

¿Qué sigue?