在执行请求中传递运行时参数

您可以在工作流执行请求中传递运行时实参,并使用工作流变量访问这些实参。

设置接收运行时参数的工作流

如需将工作流设置为接收您在执行请求中传递给它的运行时实参,请执行以下操作:

  1. 按照相应步骤创建新工作流,或选择现有工作流进行更新,但请勿进行部署。

  2. 在工作流的定义中添加一个 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}"
            }
          }
        ]
      }
    }
      
  3. 部署您的工作流以完成创建或更新。

在执行请求中传递数据

如果您的工作流设置为接收运行时实参,您可以将 JSON 格式的字符串(如 {"firstName":"Workflows","lastName":"User"})传递给执行请求中的工作流。

控制台

  1. 如需执行工作流,请在 Google Cloud 控制台中前往工作流页面:

    转到 Workflows

  2. 工作流页面上,选择一个工作流以转到其详情页面。

  3. 工作流详细信息页面上,选择 执行

  4. 在显示的“执行工作流”页面上,在“输入”区域中输入包含参数名称和参数值的 JSON 字符串(例如 {"firstName":"Workflows","lastName":"User"}):

    使用示例 JSON 字符串填充的输入区域

  5. 点击执行

    执行详情页面上,您可以查看执行结果,包括输出 Hello, Workflows User!、执行 ID 和状态,以及工作流执行的当前或最终步骤。如需了解详情,请参阅访问工作流执行结果

gcloud

--data 标志添加到用于执行工作流的 gcloud workflow execute 命令中。此标志使用 JSON 字符串格式的数据。例如,如需将 firstNamelastName 传递给上一个示例工作流,请执行以下操作:

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