您可以在工作流执行请求中传递运行时参数, 使用工作流变量。
设置接收运行时参数的工作流
设置工作流以接收作为 部分,请执行以下操作:
在工作流的定义中添加一个
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}" } } ] } }
部署您的工作流以完成创建或更新。
在执行请求中传递数据
将工作流设置为接收运行时参数后,您可以将一个字符串
(例如
{"firstName":"Workflows","lastName":"User"}
添加到
执行请求。
控制台
如需执行工作流,请在 Google Cloud 控制台中前往 工作流程页面:
在 Workflows 页面上,选择一个工作流以转到 详细信息页面。
在工作流详细信息页面上,选择 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 客户端库,请参阅 执行工作流。
REST API
将
data
标志附加到用于执行工作流的命令。data
的值是一个 JSON 格式的字符串,它包含的参数的值是一个或多个转义的“参数-值”对。例如,如需将firstName
和lastName
传递给上一个示例工作流,请执行以下操作:curl --request POST \ --header "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ --header 'Content-Type: application/json' \ --data '{"argument":"{\"firstName\":\"FIRST\",\"lastName\":\"LAST\"}"}' \ "https://workflowexecutions.googleapis.com/v1/projects/PROJECT_NUMBER/locations/us-central1/workflows/WORKFLOW_NAME/executions"
替换以下内容:
PROJECT_NUMBER
:您的 Google Cloud 项目编号WORKFLOW_NAME
:工作流的名称FIRST
:要传递给firstName
的工作流程LAST
:要传递给lastName
的工作流程
输出应类似如下所示:
{ "name": "projects/PROJECT_NUMBER/locations/us-central1/workflows/WORKFLOW_NAME/executions/EXECUTION_ID", "startTime": "2020-11-09T23:51:31.765761331Z", "state": "ACTIVE", "argument": "{\"firstName\":\"Workflows\",\"lastName\":\"User\"}", "workflowRevisionId": "000001-08c" } ```
如需获取执行结果,请运行以下命令:
curl --request GET \ --header "Authorization: Bearer "$(gcloud auth application-default print-access-token) \ --header 'Content-Type: application/json' \ "https://workflowexecutions.googleapis.com/v1/projects/PROJECT_NUMBER/locations/us-central1/workflows/WORKFLOW_NAME/executions/EXECUTION_ID"
将
EXECUTION_ID
替换为输出中的 ID 系统返回了第一个命令此输出包含类似于以下内容的行:
"argument": "{\"firstName\":\"Workflows\",\"lastName\":\"User\"}", "result": "\"Hello, Workflows User!\"",
如需详细了解如何使用 REST API 执行工作流,请参阅执行工作流。
访问运行时参数
此示例会在执行请求的过程中访问传递给工作流的运行时参数。所有参数都存储在同一个映射中,声明为主工作流的参数。
运行此工作流时,请使用以下格式传入运行时参数:
{"firstName":"Sherlock", "lastName":"Holmes"}
YAML
JSON
您可以将 default
与标准库函数结合使用,
map.get,用于访问
可选的运行时参数,并且如果键不是
找到。在以下示例中,如果未指定 region
,
已使用 northamerica-northeast1
:
YAML
main: params: [input] steps: - init: assign: - region: ${default(map.get(input, "region"), "northamerica-northeast1")}
JSON
{ "main": { "params": [ "input" ], "steps": [ { "init": { "assign": [ { "region": "${default(map.get(input, \"region\"), \"northamerica-northeast1\")}" } ] } } ] } }