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 el que se ejecutan los pasos de tu flujo de trabajo. Los saltos básicos te permiten definir qué paso se ejecutará a continuación el flujo de trabajo. Los saltos condicionales se basan en 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 cumpla con criterios específicos.

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

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  5. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  6. Ya deberías tener un flujo de trabajo existente en el que quieras cambiar el orden de ejecución. Para obtener más información sobre cómo crear y, luego, 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 se ordenan con listas en las que cada paso se ejecuta en el orden que defines en el código fuente del flujo de trabajo. Puedes optar por anular este orden predeterminado mediante saltos.

Saltos básicos

Puedes especificar qué paso se debe ejecutar a continuación en un flujo de trabajo mediante 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 ejecución de los pasos existentes.

  3. En la página Editar flujo de trabajo, selecciona Siguiente para ir al editor del 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 ejecute el flujo de trabajo 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 flujo de trabajo.

    • WORKFLOW_FILE.YAML: obligatorio. El archivo fuente para el 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 los campos next a los pasos get_daylight_savings_bool y return_daylight_savings_bool para que los pasos 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 específica. 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 del flujo de trabajo.

  4. En la página Definir flujo de trabajo, se muestra la definición actual de tu flujo de trabajo. Si deseas editar el flujo de trabajo para que ejecute un determinado paso 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 evaluará. Si esta expresión se evalúa como verdadera, el flujo de trabajo 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 que se evaluará. Si esta expresión se evalúa como verdadera, el flujo de trabajo 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: Indica 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. Si deseas editar el flujo de trabajo para que ejecute un paso determinado según una declaración 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 evaluará. Si esta expresión se evalúa como verdadera, el flujo de trabajo 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 que se evaluará. Si esta expresión se evalúa como verdadera, el flujo de trabajo 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: Indica los nombres de los pasos del 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. El nombre de tu flujo de trabajo.

    • WORKFLOW_FILE.YAML: obligatorio. El archivo fuente para el flujo de trabajo.

Ejemplo

Por ejemplo, el siguiente flujo de trabajo usa un bloque switch 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 el flujo de trabajo 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 una colección de datos, como una lista o un mapa.

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

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

¿Qué sigue?