Controllo dell'ordine di esecuzione in un flusso di lavoro

Questa pagina mostra come utilizzare i salti o i cicli for per controllare l'ordine in cui vengono eseguiti i passaggi del flusso di lavoro. I salti di base ti consentono di definire il passaggio successivo del flusso di lavoro. I salti condizionali si basano su salti di base, che ti consentono di utilizzare espressioni condizionali per controllare l'ordine di esecuzione attraverso un flusso di lavoro. Ad esempio, puoi eseguire determinati passaggi solo quando una variabile o una risposta di un altro passaggio del flusso di lavoro soddisfa criteri specifici.

Gli esempi in questa pagina utilizzano un'API di esempio che restituisce il giorno della settimana.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  6. Dovresti già avere un flusso di lavoro in cui vuoi modificare l'ordine di esecuzione. Per scoprire come creare ed eseguire il deployment di un flusso di lavoro, consulta Creare e aggiornare un flusso di lavoro.

Utilizza i salti per modificare l'ordine di esecuzione

Per impostazione predefinita, tutti i flussi di lavoro sono elenchi ordinati in cui viene eseguito ogni passaggio nell'ordine definito nel codice sorgente del flusso di lavoro. Puoi scegliere di ignorare questo ordinamento predefinito utilizzando i salti.

Salti di base

Puoi specificare il passaggio successivo da eseguire in un flusso di lavoro utilizzando salti di base.

Console

  1. Apri la pagina Workflows nella console Google Cloud:
    Vai a Workflows

  2. Seleziona il nome del flusso di lavoro in cui vuoi modificare l'ordine di esecuzione dei passaggi esistenti.

  3. Nella pagina Modifica flusso di lavoro, seleziona Avanti per passare all'editor del flusso di lavoro.

  4. Aggiungi il campo next alla fine di un passaggio per indicare al flusso di lavoro di passare a un passaggio specifico:

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

    Sostituisci STEP_NAME_TO_JUMP_TO con il nome del passaggio che vuoi che venga eseguito successivamente dal flusso di lavoro. Ad esempio, next_step.

  5. Seleziona Esegui il deployment.

gcloud

  1. Apri il file di definizione del flusso di lavoro nell'editor di testo che preferisci.

  2. Aggiungi il campo next alla fine di un passaggio per indicare al flusso di lavoro di passare a un passaggio specifico:

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

    Sostituisci STEP_NAME_TO_JUMP_TO con il nome del passaggio successivo che dovrà essere eseguito dal flusso di lavoro. Ad esempio, next_step.

  3. Salva il file del flusso di lavoro.

  4. Per eseguire il deployment del flusso di lavoro, inserisci questo comando:

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

    Sostituisci quanto segue:

    • WORKFLOW_NAME: obbligatorio. Il nome del tuo flusso di lavoro.

    • WORKFLOW_FILE.YAML: obbligatorio. Il file di origine per il flusso di lavoro.

Esempio

Ad esempio, i passaggi del seguente flusso di lavoro non sono ordinati:

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

In questo esempio, i campi next sono stati aggiunti ai passaggi get_daylight_savings_bool e return_daylight_savings_bool in modo che i passaggi vengano eseguiti nell'ordine corretto:

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

Salti condizionali

Puoi utilizzare i salti condizionali per determinare il passaggio successivo da eseguire in un flusso di lavoro. I salti condizionali utilizzano blocchi switch, che saltano a un passaggio specificato se viene soddisfatta una determinata condizione. Ogni blocco switch può includere un massimo di 50 condizioni.

Console

  1. Apri la pagina Workflows nella console Google Cloud:
    Vai a Workflows

  2. Seleziona il nome del flusso di lavoro a cui vuoi aggiungere un blocco switch.

  3. Nella pagina Modifica flusso di lavoro, seleziona Avanti per passare all'editor del flusso di lavoro.

  4. Nella pagina Definisci flusso di lavoro viene visualizzata la definizione attuale del flusso di lavoro. Per modificare il flusso di lavoro in modo che esegua un determinato passaggio in base a un'istruzione condizionale, aggiungi un passaggio che utilizzi un blocco 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": {
              ...
            }
          }
        ]

    Sostituisci quanto segue:

    • SWITCH_STEP_NAME: il nome del passaggio contenente il blocco switch.

    • EXPRESSION_ONE: la prima espressione da valutare. Se questa espressione restituisce true, il flusso di lavoro esegue successivamente STEP_A. Se questa espressione restituisce false, il flusso di lavoro valuta l'espressione successiva.

    • EXPRESSION_TWO: la seconda espressione da valutare. Se questa espressione restituisce true, il flusso di lavoro esegue successivamente STEP_B. Se questa espressione restituisce false, il flusso di lavoro esegue STEP_C.

    • STEP_A, STEP_B, STEP_C: nomi dei passaggi segnaposto.

  5. Seleziona Esegui il deployment.

gcloud

  1. Apri la definizione del flusso di lavoro nell'editor di testo che preferisci.

  2. Per modificare il flusso di lavoro in modo che esegua un determinato passaggio sulla base di un'istruzione condizionale, aggiungi un passaggio che utilizzi un blocco 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": {
          ...
        }
      }
    ]
      

    Sostituisci quanto segue:

    • SWITCH_STEP_NAME: il nome del passaggio contenente il blocco switch.

    • EXPRESSION_ONE: la prima espressione da valutare. Se questa espressione restituisce true, il flusso di lavoro esegue successivamente STEP_A. Se questa espressione restituisce false, il flusso di lavoro valuta l'espressione successiva.

    • EXPRESSION_TWO: la seconda espressione da valutare. Se questa espressione restituisce true, il flusso di lavoro esegue successivamente STEP_B. Se questa espressione restituisce false, il flusso di lavoro esegue STEP_C.

    • STEP_A, STEP_B, STEP_C: nomi dei passaggi segnaposto.

  3. Salva il file del flusso di lavoro.

  4. Per eseguire il deployment del flusso di lavoro, inserisci questo comando:

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

    Sostituisci quanto segue:

    • WORKFLOW_NAME: obbligatorio. Il nome del tuo flusso di lavoro.

    • WORKFLOW_FILE.YAML: obbligatorio. Il file di origine per il flusso di lavoro.

Esempio

Ad esempio, questo flusso di lavoro utilizza un blocco switch per controllare l'ordine di esecuzione del flusso di lavoro:

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

In questo esempio, il blocco switch ha due condizioni. Il parser valuta ogni condizione in ordine e, se il risultato dell'espressione della condizione è true, viene chiamato il passaggio next di quella condizione. Se nessuna delle condizioni è soddisfatta, il flusso di lavoro chiama il passaggio specificato dal campo next al di fuori del blocco switch, che, in questo esempio, è il passaggio workWeek.

Ad esempio, se il giorno della settimana è "Saturday", il flusso di lavoro passa al passaggio weekend e restituisce il messaggio "It's the weekend!". Il flusso di lavoro non esegue il passaggio friday perché il passaggio condizionale lo salta e il flusso di lavoro non esegue il passaggio workWeek perché return interrompe l'esecuzione del flusso di lavoro alla fine del passaggio weekend.

Usa for loop per l'iterazione

Puoi utilizzare i loop for per ripetere l'iterazione in una sequenza di numeri o attraverso una raccolta di dati, ad esempio un elenco o una mappa.

Puoi esaminare ogni elemento di un elenco o una mappa utilizzando l'iterazione basata su elementi. Se hai un intervallo specifico di valori numerici con cui eseguire l'iterazione, puoi utilizzare l'iterazione basata su intervallo.

Per ulteriori informazioni ed esempi, consulta il riferimento alla sintassi sull'iterazione.

Passaggi successivi