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

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

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

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

  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 页面:

    转到 Workflows

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

  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

  1. data 标志附加到用于执行工作流的命令。data 的值是一个 JSON 格式的字符串,它包含的参数的值是一个或多个转义的“参数-值”对。例如,如需将 firstNamelastName 传递给上一个示例工作流,请执行以下操作:

    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"
    }
     ```
    
  2. 如需获取执行结果,请运行以下命令:

    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

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}"
        }
      }
    ]
  }
}

您可以将 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\")}"
              }
            ]
          }
        }
      ]
    }
  }

后续步骤