本页面介绍如何使用跳转或 for 循环来控制工作流步骤的运行顺序。基本跳转允许您定义工作流下一步运行的步骤。条件跳转操作基于基本跳转构建,允许您使用条件表达式来控制工作流中的执行顺序。例如,只有在另一个工作流步骤的变量或响应满足特定条件时,您才能运行某些步骤。
本页面上的示例使用的示例 API 会返回一周中的某一天。
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
- 您应该已经有一个工作流,您想要更改其执行顺序。如需了解如何创建和部署工作流,请参阅创建和更新工作流。
使用跳转操作更改执行顺序
默认情况下,所有工作流都会进行排序,其中每个步骤都按您在工作流的源代码中定义的顺序运行。您可以选择使用跳转操作替换此默认顺序。
基本跳转操作
您可以使用基本跳转操作,指定要在工作流中运行的下一步。
控制台
打开 Google Cloud 控制台中的 Workflows 页面:
前往“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 个条件。
控制台
在 Google Cloud 控制台:
前往 Workflows选择要添加
switch
块的工作流的名称。在修改工作流页面上,选择下一步以转到工作流编辑器。
定义工作流页面上将显示工作流的当前定义。如需修改工作流,使其根据条件语句执行特定步骤,请添加使用
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
:占位符步骤名称。
选择部署。
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
:占位符步骤名称。
保存工作流文件。
要部署工作流,请输入以下命令:
gcloud workflows deploy WORKFLOW_NAME \ --source=WORKFLOW_FILE.YAML
替换以下内容:
WORKFLOW_NAME
:必填。工作流的名称。WORKFLOW_FILE.YAML
:必填。工作流的源文件。
示例
例如,以下工作流使用切换块来控制工作流的执行顺序:
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
步骤。如果不满足任何条件,工作流将调用 switch
块外部的 next
字段指定的步骤,在本例中为步骤 workWeek
。
例如,如果星期几为 "Saturday"
,则工作流会跳转至步骤 weekend
并返回消息 "It's the weekend!"
。工作流不会因为条件跳转操作跳过了步骤 friday
而不执行该步骤,并且工作流不会因为 return
在步骤 weekend
结束时停止执行工作流而不执行步骤 workWeek
。
使用 for
循环进行迭代
您可以使用 for
循环遍历一系列数字或通过列表或映射等数据集合。
您可以使用基于项的迭代来浏览列表或映射中的每一项。如果您要在特定数值范围内进行迭代,则可以使用基于范围的迭代。
如需了解详情和示例,请参阅有关迭代的语法参考文档。