本页面介绍了如何使用跳转操作来控制工作流步骤的运行顺序。基本跳转操作允许您定义要在工作流中运行的下一步。条件跳转操作是在基本跳转操作的基础上构建的,允许您使用条件表达式通过工作流控制执行顺序。例如,仅当来自另一个工作流步骤的变量或响应符合特定条件时,您才能运行某些步骤。
本页面上的示例使用将返回星期几的示例 API。
准备工作
- 登录您的 Google Cloud 帐号。如果您是 Google Cloud 新手,请创建一个帐号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能。
- 存在您希望在其中更改执行顺序的工作流。如需了解如何创建和部署工作流,请参阅创建和更新工作流
使用跳转操作更改执行顺序
默认情况下,所有工作流都会进行排序,其中每个步骤都按您在工作流的源代码中定义的顺序运行。您可以选择使用跳转操作替换此默认顺序。
基本跳转操作
您可以使用基本跳转操作,指定要在工作流中运行的下一步。
控制台
打开 Google Cloud Console 中的“工作流”页面:
转到“工作流”页面选择您要在其中更改现有步骤执行顺序的工作流的名称。
在修改工作流页面上,选择下一步以转到工作流编辑器。
在步骤结尾添加
next
字段,以指示工作流跳转到特定步骤:- step_a: ... next: STEP_NAME - step_b: ... - next_step: ...
将 STEP_NAME 替换为您希望工作流执行的下一步的名称。例如
next_step
。选择部署。
gcloud
使用您所选的文本编辑器打开工作流的定义文件。
在步骤结尾添加
next
字段,以指示工作流跳转到特定步骤:- step_a: ... next: STEP_NAME - step_b: ... - next_step: ...
将 STEP_NAME 替换为您希望工作流执行的下一步的名称。例如
next_step
。保存工作流文件。
如需部署工作流,请输入以下命令:
gcloud workflows deploy WORKFLOW_NAME \ --source=WORKFLOW_FILE.YAML
请替换以下内容:
WORKFLOW_NAME:必填。您的工作流的名称。
WORKFLOW_FILE.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}
为步骤 get_time
和 get_daylight_savings_bool
添加 next
字段,以便工作流按正确的顺序执行:
- 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
块最多可包含 10 个条件。
控制台
打开 Google Cloud Console 中的“工作流”页面:
转到“工作流”页面选择要添加
switch
块的工作流的名称。在修改工作流页面上,选择下一步以转到工作流编辑器。
定义工作流页面会显示工作流的当前定义。如需修改工作流,使其根据条件语句执行特定步骤,请添加使用
switch
块的步骤:- 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
块的步骤:- 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:占位符步骤名称。
switch
语句可以根据需要设置任意数量的条件。保存工作流文件。
如需部署工作流,请输入以下命令:
gcloud workflows deploy WORKFLOW_NAME \ --source=WORKFLOW_FILE.YAML
请替换以下内容:
WORKFLOW_NAME:必填。您的工作流的名称。
WORKFLOW_FILE.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."
在本例中,switch
块有两个条件。解析器会依次评估每个条件,如果条件表达式的结果为 true
,则会调用该条件的 next
步骤。如果不满足任何这些条件,工作流便会调用 switch
块外部的 next
字段指定的步骤,在本例中为步骤 workWeek
。
例如,如果星期几为 "Saturday"
,则工作流会跳转至步骤 weekend
并返回消息 "It's the weekend!"
。工作流不会因为条件跳转操作跳过了步骤 friday
而不执行该步骤,并且工作流不会因为 return
在步骤 weekend
结束时停止执行工作流而不执行步骤 workWeek
。