Contrôler l'ordre d'exécution des étapes d'un workflow

Cette page explique comment utiliser des sauts ou des boucles pour contrôler l'ordre dans lequel les étapes de votre workflow s'exécutent. Les sauts de base vous permettent de définir la prochaine étape qui sera exécutée par le workflow. Les sauts conditionnels reposent sur des sauts de base, ce qui vous permet d'utiliser des expressions conditionnelles pour contrôler l'ordre d'exécution d'un workflow. Par exemple, vous ne pouvez exécuter certaines étapes que lorsqu'une variable ou une réponse d'une autre étape du workflow répond à des critères spécifiques.

Les exemples de cette page utilisent un exemple d'API qui renvoie le jour de la semaine.

Avant de commencer

  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. Vous devez déjà disposer d'un workflow existant dans lequel vous souhaitez modifier l'ordre d'exécution. Pour savoir comment créer et déployer un workflow, consultez la page Créer et mettre à jour un workflow.

Utiliser des sauts pour modifier l'ordre d'exécution

Par défaut, tous les workflows sont classés en tant que listes dans lesquelles chaque étape est exécutée dans l'ordre que vous définissez dans le code source du workflow. Vous pouvez choisir de remplacer cet ordre par défaut à l'aide de sauts.

Sauts de base

Vous pouvez spécifier la prochaine étape à exécuter dans un workflow en utilisant des sauts de base.

Console

  1. Ouvrez la page "Workflows" de Google Cloud Console :
    Accéder à Workflows

  2. Sélectionnez le nom du workflow dans lequel vous souhaitez modifier l'ordre d'exécution des étapes existantes.

  3. Sur la page Modifier le workflow, sélectionnez Suivant pour accéder à l'éditeur de workflow.

  4. Ajoutez le champ next à la fin d'une étape pour indiquer au workflow de passer à une étape particulière:

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

    Remplacez STEP_NAME_TO_JUMP_TO par le nom. de l'étape que vous souhaitez que le workflow exécute ensuite. Par exemple, next_step.

  5. Sélectionnez Deploy (Déployer).

gcloud

  1. Ouvrez le fichier de définition de votre workflow dans l'éditeur de texte de votre choix.

  2. Ajoutez le champ next à la fin d'une étape pour indiquer au workflow de passer à une étape particulière:

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

    Remplacez STEP_NAME_TO_JUMP_TO par le nom du à laquelle vous souhaitez que le workflow s'exécute ensuite. Exemple :next_step

  3. Enregistrez le fichier de workflow.

  4. Pour déployer le workflow, saisissez la commande suivante:

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

    Remplacez les éléments suivants :

    • WORKFLOW_NAME : Obligatoire. Nom de votre workflow.

    • WORKFLOW_FILE.YAML : Obligatoire. Fichier source du workflow.

Exemple

Par exemple, le workflow suivant comporte les étapes dans le désordre:

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

Dans cet exemple, des champs next ont été ajoutés aux étapes get_daylight_savings_bool et return_daylight_savings_bool afin que les étapes s'exécutent dans l'ordre approprié:

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

Sauts conditionnels

Vous pouvez utiliser les sauts conditionnels pour déterminer la prochaine étape à exécuter dans un workflow. Les sauts conditionnels utilisent des blocs switch qui passent à une étape spécifiée si une condition particulière est remplie. Chaque bloc switch peut inclure un maximum de 50 conditions.

Console

  1. Ouvrez la page "Workflows" de Google Cloud Console :
    Accéder à Workflows

  2. Sélectionnez le nom du workflow auquel vous souhaitez ajouter un bloc switch.

  3. Sur la page Modifier le workflow, sélectionnez Suivant pour accéder à l'éditeur de workflow.

  4. Sur la page Définir le workflow, la définition actuelle de votre workflow s'affiche. Pour modifier le workflow de sorte qu'il exécute une étape donnée en fonction d'une instruction conditionnelle, ajoutez une étape qui utilise un bloc 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": {
              ...
            }
          }
        ]

    Remplacez les éléments suivants :

    • SWITCH_STEP_NAME : nom de l'étape contenant le bloc switch.

    • EXPRESSION_ONE : première expression à évaluer. Si cette expression renvoie la valeur "true", le workflow s'exécute STEP_A ensuite. Si cette expression renvoie la valeur "false", le workflow évalue l'expression suivante.

    • EXPRESSION_TWO : deuxième expression à évaluer. Si cette expression renvoie la valeur "true", le workflow s'exécute STEP_B ensuite. Si cette expression renvoie la valeur "false", le workflow exécute STEP_C.

    • STEP_A, STEP_B, STEP_C : noms d'étape d'espace réservé.

  5. Sélectionnez Deploy (Déployer).

gcloud

  1. Ouvrez la définition de votre workflow dans l'éditeur de texte de votre choix.

  2. Pour modifier le workflow de sorte qu'il exécute une étape donnée en fonction d'une instruction conditionnelle, ajoutez une étape qui utilise un bloc 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": {
          ...
        }
      }
    ]
      

    Remplacez les éléments suivants :

    • SWITCH_STEP_NAME : nom de l'étape contenant le bloc switch.

    • EXPRESSION_ONE : première expression à évaluer. Si cette expression renvoie la valeur "true", le workflow s'exécute STEP_A ensuite. Si cette expression renvoie la valeur "false", le workflow évalue l'expression suivante.

    • EXPRESSION_TWO : deuxième expression à évaluer. Si cette expression renvoie la valeur "true", le workflow s'exécute STEP_B ensuite. Si cette expression renvoie la valeur "false", le workflow exécute STEP_C.

    • STEP_A, STEP_B STEP_C: noms des étapes d'espace réservé.

  3. Enregistrez le fichier de workflow.

  4. Pour déployer le workflow, saisissez la commande suivante:

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

    Remplacez les éléments suivants :

    • WORKFLOW_NAME : Obligatoire. Nom de votre workflow.

    • WORKFLOW_FILE.YAML : Obligatoire. Fichier source du workflow.

Exemple

Par exemple, ce workflow utilise un bloc de commutateur pour contrôler l'ordre d'exécution du workflow:

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

Dans cet exemple, le bloc switch a deux conditions. L'analyseur évalue chaque condition dans l'ordre et si le résultat de l'expression de la condition est true, l'étape next de cette condition est appelée. Si aucune des conditions n'est remplie, le workflow appelle l'étape spécifiée par le champ next en dehors du bloc switch, qui est, dans cet exemple, l'étape workWeek.

Par exemple, si le jour de la semaine est "Saturday", le workflow passe à l'étape weekend et renvoie le message "It's the weekend!". Le workflow n'exécute pas l'étape friday, car le saut conditionnel l'ignore et le workflow n'exécute pas l'étape workWeek, car return arrête l'exécution. du workflow à la fin de l'étape weekend.

Utiliser les boucles for pour effectuer une itération

Vous pouvez utiliser des boucles for pour effectuer une itération sur une séquence de nombres ou sur une collection de données, telle qu'une liste ou une carte.

Vous pouvez parcourir chaque élément d'une liste ou d'une carte en utilisant une itération basée sur les éléments. Si vous avez une plage spécifique de valeurs numériques à itérer, vous pouvez utiliser une itération basée sur une plage.

Pour plus d'informations et d'exemples, consultez la documentation de référence sur la syntaxe concernant l'itération.

Étape suivante