您可以在工作流执行请求中传递运行时实参,并使用工作流变量访问这些实参。
设置接收运行时参数的工作流
如需将工作流设置为接收您在执行请求中传递给它的运行时实参,请执行以下操作:
在工作流的定义中添加一个
params字段。确保将参数名称放在方括号内,并将主工作流放在main块中:YAML
main: params: [ARG_NAME] steps: ...
JSON
{ "main": { "params": ["ARG_NAME"], "steps": [ ... ] ... } }
main块接受单个参数,该参数是任何有效的 JSON 数据类型的名称,例如数组、对象或字符串。最佳做法是传入具有多个已指定参数的对象,以便更轻松地理解其用途以及添加参数。然后,您可以使用点表示法访问参数。
其他子工作流可以有多个参数。
例如,以下工作流会向您以运行时参数传递其姓名的用户返回“Hello”问候语:
YAML
main: params: [args] steps: - step1: assign: - outputVar: ${"Hello, " + args.firstName + " " + args.lastName + "!"} - step2: return: ${outputVar}
JSON
{ "main": { "params": [ "args" ], "steps": [ { "step1": { "assign": [ { "outputVar": "${\"Hello \" + args.firstName + \" \" + args.lastName}" } ] } }, { "step2": { "return": "${outputVar}" } } ] } }
部署您的工作流以完成创建或更新。
在执行请求中传递数据
如果您的工作流设置为接收运行时实参,您可以将 JSON 格式的字符串(如 {"firstName":"Workflows","lastName":"User"})传递给执行请求中的工作流。
控制台
如需执行工作流,请在 Google Cloud 控制台中前往工作流页面:
在工作流页面上,选择一个工作流以转到其详情页面。
在工作流详细信息页面上,选择 play_arrow 执行。
在显示的“执行工作流”页面上,在“输入”区域中输入包含参数名称和参数值的 JSON 字符串(例如
{"firstName":"Workflows","lastName":"User"}):
点击执行。
在执行详情页面上,您可以查看执行结果,包括输出
Hello, Workflows User!、执行 ID 和状态,以及工作流执行的当前或最终步骤。如需了解详情,请参阅访问工作流执行结果。
gcloud
将 --data 标志添加到用于执行工作流的 gcloud workflow execute 命令中。此标志使用 JSON 字符串格式的数据。例如,如需将 firstName 和 lastName 传递给上一个示例工作流,请执行以下操作:
gcloud workflows run WORKFLOW_NAME \ --data='{"firstName":"FIRST","lastName":"LAST"}'
替换以下内容:
WORKFLOW_NAME:工作流的名称FIRST:您要传递给firstName的工作流的字符串LAST:您要传递给lastName的工作流的字符串
输出应类似如下所示:
Waiting for execution [9379b067-306a-4db1-a58d-c9fc99aebfd4] to complete...done.
argument: '{"firstName":"Workflows","lastName":"User"}'
endTime: '2022-07-19T13:52:47.659199466Z'
name: projects/1051295516635/locations/us-central1/workflows/workflow-6/executions/9379b067-306a-4db1-a58d-c9fc99aebfd4
result: '"Hello, Workflows User!"'
startTime: '2022-07-19T13:52:47.623862835Z'
state: SUCCEEDED
status:
currentSteps:
- routine: main
step: step2
workflowRevisionId: 000002-138
客户端库
根据客户端库语言的不同,您可以在执行请求中传递运行时实参。
例如,使用 JavaScript:
// Execute workflow
try {
const createExecutionRes = await client.createExecution({
parent: client.workflowPath(projectId, location, workflow),
execution: {
argument: JSON.stringify({"firstName":"Workflows","lastName":"User"})
}
});
const executionName = createExecutionRes[0].name;
或者,使用 Java:
// Creates the execution object.
CreateExecutionRequest request =
CreateExecutionRequest.newBuilder()
.setParent(parent.toString())
.setExecution(Execution.newBuilder().setArgument("{\"firstName\":\"Workflows\",\"lastName\":\"User\"}").build())
.build();
如需详细了解如何使用 Google API 客户端库执行工作流,请参阅执行工作流。