בדף הזה מוסבר איך להשתמש בקפיצות או בלולאות for כדי לשלוט בסדר שבו השלבים בתהליך העבודה מופעלים. המעברים הבסיסיים מאפשרים לכם להגדיר איזה שלב יפעל בתהליך העבודה. קפיצות מותנות מבוססות על קפיצות בסיסיות, ומאפשרות להשתמש בביטויים מותנים כדי לשלוט בסדר הביצוע בתהליך עבודה. לדוגמה, אפשר להריץ שלבים מסוימים רק כשמשתנה או תגובה משלב אחר בתהליך העבודה עומדים בקריטריונים ספציפיים.
בדוגמאות שבדף הזה נעשה שימוש בממשק API לדוגמה שמחזיר את היום בשבוע.
לפני שמתחילים
- נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- צריך שיהיה לכם כבר תהליך עבודה קיים שבו אתם רוצים לשנות את סדר הביצוע. במאמר יצירה ועדכון של תהליך עבודה מוסבר איך ליצור ולפרוס תהליך עבודה.
שימוש בקפיצות כדי לשנות את סדר הביצוע
כברירת מחדל, כל תהליכי העבודה הם רשימות מסודרות שבהן כל שלב מופעל לפי הסדר שמוגדר בקוד המקור של תהליך העבודה. אפשר לשנות את סדר ברירת המחדל הזה באמצעות מעברים.
מעברים בסיסיים
אפשר לציין איזה שלב יפעל בהמשך בתהליך עבודה באמצעות מעברים בסיסיים.
המסוף
פותחים את הדף Workflows במסוףGoogle Cloud :
Go to Workflowsבוחרים את שם תהליך העבודה שבו רוצים לשנות את סדר הביצוע של השלבים הקיימים.
בדף עריכת תהליך העבודה, לוחצים על הבא כדי לעבור לכלי לעריכת תהליך העבודה.
מוסיפים את השדה
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.לוחצים על פריסה.
gcloud
פותחים את קובץ ההגדרה של תהליך העבודה בכלי לעריכת טקסט לבחירתכם.
מוסיפים את השדה
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.שומרים את קובץ תהליך העבודה.
כדי לפרוס את תהליך העבודה, מזינים את הפקודה הבאה:
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 תנאים.
המסוף
פותחים את הדף Workflows במסוףGoogle Cloud :
Go to Workflowsבוחרים את השם של זרימת העבודה שרוצים להוסיף לה בלוק
switch.בדף עריכת תהליך העבודה, לוחצים על הבא כדי לעבור לכלי לעריכת תהליך העבודה.
בדף 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.
לוחצים על פריסה.
gcloud
פותחים את ההגדרה של תהליך העבודה בכלי לעריכת טקסט לבחירתכם.
כדי לערוך את תהליך העבודה כך ששלב מסוים יופעל על סמך משפט מותנה, מוסיפים שלב שמשתמש בבלוק
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.
שומרים את קובץ תהליך העבודה.
כדי לפרוס את תהליך העבודה, מזינים את הפקודה הבאה:
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 כדי לבצע איטרציה על רצף של מספרים או על אוסף של נתונים, כמו רשימה או מפה.
אפשר לעבור על כל פריט ברשימה או במפה באמצעות איטרציה מבוססת-פריטים. אם יש לכם טווח מסוים של ערכים מספריים שאתם רוצים לבצע איטרציה לגביהם, אתם יכולים להשתמש באיטרציה מבוססת-טווח.
מידע נוסף ודוגמאות זמינים במאמר בנושא איטרציה.