שליטה בסדר הביצוע בתהליך עבודה

בדף הזה מוסבר איך להשתמש בקפיצות או בלולאות for כדי לשלוט בסדר שבו השלבים בתהליך העבודה מופעלים. המעברים הבסיסיים מאפשרים לכם להגדיר איזה שלב יפעל בתהליך העבודה. קפיצות מותנות מבוססות על קפיצות בסיסיות, ומאפשרות להשתמש בביטויים מותנים כדי לשלוט בסדר הביצוע בתהליך עבודה. לדוגמה, אפשר להריץ שלבים מסוימים רק כשמשתנה או תגובה משלב אחר בתהליך העבודה עומדים בקריטריונים ספציפיים.

בדוגמאות שבדף הזה נעשה שימוש בממשק API לדוגמה שמחזיר את היום בשבוע.

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify 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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. צריך שיהיה לכם כבר תהליך עבודה קיים שבו אתם רוצים לשנות את סדר הביצוע. במאמר יצירה ועדכון של תהליך עבודה מוסבר איך ליצור ולפרוס תהליך עבודה.

שימוש בקפיצות כדי לשנות את סדר הביצוע

כברירת מחדל, כל תהליכי העבודה הם רשימות מסודרות שבהן כל שלב מופעל לפי הסדר שמוגדר בקוד המקור של תהליך העבודה. אפשר לשנות את סדר ברירת המחדל הזה באמצעות מעברים.

מעברים בסיסיים

אפשר לציין איזה שלב יפעל בהמשך בתהליך עבודה באמצעות מעברים בסיסיים.

המסוף

  1. פותחים את הדף Workflows במסוףGoogle Cloud :
    Go to Workflows

  2. בוחרים את שם תהליך העבודה שבו רוצים לשנות את סדר הביצוע של השלבים הקיימים.

  3. בדף עריכת תהליך העבודה, לוחצים על הבא כדי לעבור לכלי לעריכת תהליך העבודה.

  4. מוסיפים את השדה next בסוף שלב כדי להגדיר לתהליך העבודה לעבור לשלב מסוים:

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

    מחליפים את STEP_NAME_TO_JUMP_TO בשם של השלב שרוצים שהתהליך יבצע בהמשך. לדוגמה, next_step.

  5. לוחצים על פריסה.

gcloud

  1. פותחים את קובץ ההגדרה של תהליך העבודה בכלי לעריכת טקסט לבחירתכם.

  2. מוסיפים את השדה next בסוף שלב כדי להגדיר לתהליך העבודה לעבור לשלב מסוים:

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

    מחליפים את STEP_NAME_TO_JUMP_TO בשם השלב שרוצים שהתהליך יבצע בהמשך. לדוגמה, next_step.

  3. שומרים את קובץ תהליך העבודה.

  4. כדי לפרוס את תהליך העבודה, מזינים את הפקודה הבאה:

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

    מחליפים את מה שכתוב בשדות הבאים:

    • WORKFLOW_NAME: חובה. השם של תהליך העבודה.

    • WORKFLOW_FILE.YAML: חובה. קובץ המקור של תהליך העבודה.

דוגמה

לדוגמה, בתהליך העבודה הבא השלבים לא מסודרים:

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

בדוגמה הזו, שדות next נוספו לשלבים get_daylight_savings_bool ו-return_daylight_savings_bool כדי שהשלבים יפעלו בסדר הנכון:

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

קפיצות מותנות

אתם יכולים להשתמש בקפיצות מותנות כדי לקבוע איזה שלב יפעל בהמשך בתהליך עבודה. במעברים מותנים משתמשים בבלוקים switch, שמעבירים לשלב מסוים אם מתקיים תנאי מסוים. כל בלוק switch יכול לכלול עד 50 תנאים.

המסוף

  1. פותחים את הדף Workflows במסוףGoogle Cloud :
    Go to Workflows

  2. בוחרים את השם של זרימת העבודה שרוצים להוסיף לה בלוק switch.

  3. בדף עריכת תהליך העבודה, לוחצים על הבא כדי לעבור לכלי לעריכת תהליך העבודה.

  4. בדף Define workflow מוצגת ההגדרה הנוכחית של תהליך העבודה. כדי לערוך את תהליך העבודה כך ששלב מסוים יופעל על סמך משפט מותנה, מוסיפים שלב שמשתמש בבלוק 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": {
              ...
            }
          }
        ]

    מחליפים את מה שכתוב בשדות הבאים:

    • SWITCH_STEP_NAME: השם של השלב שמכיל את הבלוק switch.

    • EXPRESSION_ONE: הביטוי הראשון להערכה. אם הערך של הביטוי הזה הוא True, תהליך העבודה ימשיך ל-STEP_A. אם הערך של הביטוי הזה הוא false, תהליך העבודה מחשב את הערך של הביטוי הבא.

    • EXPRESSION_TWO: הביטוי השני להערכה. אם הערך של הביטוי הזה הוא True, תהליך העבודה ימשיך ל-STEP_B. אם הערך של הביטוי הזה הוא false, תהליך העבודה יבצע את STEP_C.

    • STEP_A, ‏STEP_B ו-STEP_C: שמות של שלבים שמשמשים כ-placeholder.

  5. לוחצים על פריסה.

gcloud

  1. פותחים את ההגדרה של תהליך העבודה בכלי לעריכת טקסט לבחירתכם.

  2. כדי לערוך את תהליך העבודה כך ששלב מסוים יופעל על סמך משפט מותנה, מוסיפים שלב שמשתמש בבלוק 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": {
          ...
        }
      }
    ]
      

    מחליפים את מה שכתוב בשדות הבאים:

    • SWITCH_STEP_NAME: השם של השלב שמכיל את הבלוק switch.

    • EXPRESSION_ONE: הביטוי הראשון להערכה. אם הערך של הביטוי הזה הוא True, תהליך העבודה ימשיך ל-STEP_A. אם הערך של הביטוי הזה הוא false, תהליך העבודה מחשב את הערך של הביטוי הבא.

    • EXPRESSION_TWO: הביטוי השני להערכה. אם הערך של הביטוי הזה הוא True, תהליך העבודה ימשיך ל-STEP_B. אם הערך של הביטוי הזה הוא false, תהליך העבודה יבצע את STEP_C.

    • STEP_A, ‏STEP_B ו-STEP_C: שמות של שלבים שמשמשים כ-placeholder.

  3. שומרים את קובץ תהליך העבודה.

  4. כדי לפרוס את תהליך העבודה, מזינים את הפקודה הבאה:

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

    מחליפים את מה שכתוב בשדות הבאים:

    • WORKFLOW_NAME: חובה. השם של תהליך העבודה.

    • WORKFLOW_FILE.YAML: חובה. קובץ המקור של תהליך העבודה.

דוגמה

לדוגמה, בתהליך העבודה הזה נעשה שימוש בבלוק switch כדי לשלוט בסדר הביצוע של תהליך העבודה:

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

בדוגמה הזו, בלוק switch כולל שני תנאים. הכלי לניתוח מחשב כל תנאי לפי הסדר, ואם התוצאה של ביטוי התנאי היא true, השלב next של התנאי הזה מופעל. אם אף אחד מהתנאים לא מתקיים, תהליך העבודה קורא לשלב שצוין בשדה next מחוץ לבלוק switch, שהוא במקרה הזה השלב workWeek.

לדוגמה, אם היום בשבוע הוא "Saturday", תהליך העבודה עובר לשלב weekend ומחזיר את ההודעה "It's the weekend!". תהליך העבודה לא מבצע את השלב friday כי המעבר המותנה מדלג עליו, ותהליך העבודה לא מבצע את השלב workWeek כי return מפסיק את הביצוע של תהליך העבודה בסוף השלב weekend.

שימוש בלולאות for לביצוע איטרציה

אפשר להשתמש בלולאות for כדי לבצע איטרציה על רצף של מספרים או על אוסף של נתונים, כמו רשימה או מפה.

אפשר לעבור על כל פריט ברשימה או במפה באמצעות איטרציה מבוססת-פריטים. אם יש לכם טווח מסוים של ערכים מספריים שאתם רוצים לבצע איטרציה לגביהם, אתם יכולים להשתמש באיטרציה מבוססת-טווח.

מידע נוסף ודוגמאות זמינים במאמר בנושא איטרציה.

המאמרים הבאים