输入输出

简要概述

在工作流中参数的输入,结果的输出。

在工作流模版中定义参数,以提供任务运行时读取。

配置参数输入

在模版中定义

为任务输入参数可以在以下几个地方设置:

  1. 在 “spec” 中使用 “arguments.parameters” 设置;

数据结构见 WorkflowSpec

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: hello-world-
spec:
  entrypoint: main
  arguments:
    parameters:
    - name: message
      value: hello world from parameters
...
  1. 在 “spec.templates” 中使用 “inputs.parameters” 设置;

数据结构见 Template

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: hello-world-
spec:
  entrypoint: main
  templates:
  - name: main
    inputs:
      parameters:
      - name: "username"
        value: "mingqing"
    container:
      image: ccr.ccs.tencentyun.com/opsaid/minideb:bullseye
      command: [ sh, -c ]
      args: ["echo user: {{ inputs.parameters.username }}"]
  1. 在 “spec.templates.steps” 使用 “arguments.parameters” 设置;

数据结构见 Template.ParallelStepsWorkflowStep

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: hello-world-
spec:
  entrypoint: main
  templates:
  - name: main
    steps:
    - - name: test1
        template: echo
        arguments:
          parameters:
          - name: "username"
            value: "opsaid"

  - name: echo
    inputs:
      parameters:
      - name: "username"
    container:
      image: ccr.ccs.tencentyun.com/opsaid/minideb:bullseye
      command: [ sh, -c ]
      args: ["echo user: {{ inputs.parameters.username }}"]
  1. 在 “spec.templates.dag” 中使用 “arguments.parameters” 设置。

Template.DAGTemplateDAGTask

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: hello-world-
spec:
  entrypoint: main
  templates:
  - name: main
    dag:
    - tasks:
      - name: test1
        template: echo
        arguments:
          parameters:
          - name: "username"
            value: "opsaid"

  - name: echo
    inputs:
      parameters:
      - name: "username"
    container:
      image: ccr.ccs.tencentyun.com/opsaid/minideb:bullseye
      command: [ sh, -c ]
      args: ["echo user: {{ inputs.parameters.username }}"]

先前输出作为输入

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: hello-world-
spec:
  entrypoint: main

  templates:
  - name: main
    dag:
      tasks:
      - name: task-a
        template: echo1
      - name: task-b
        template: echo2
        dependencies: [ task-a ]
        arguments:
          parameters:
          - name: hello
            value: "{{ tasks.task-a.outputs.parameters.message }}"

  - name: echo1
    outputs:
      parameters:
      - name: message
        valueFrom:
          path: "/tmp/a.txt"
    container:
      image: ccr.ccs.tencentyun.com/opsaid/minideb:bullseye
      command: [ sh, -c ]
      args: [ "echo task-a >> /tmp/a.txt" ]

  - name: echo2
    inputs:
      parameters:
      - name: hello
    container:
      image: ccr.ccs.tencentyun.com/opsaid/minideb:bullseye
      command: [ sh, -c ]
      args: [ "echo {{ inputs.parameters.hello }}" ]

如何引用变量

在工作流中一些字段是可以使用变量,在运行时 argo 自动对其进行替换,变量引用格式为:

"{{ variables }}"

支持的变量见Workflow Variables

全局变量

变量名 示例 描述
workflow.name hello-world-5x7vm 工作流名称
workflow.namespace default 工作流运行命名空间
workflow.mainEntrypoint main 工作流入口任务名称
workflow.serviceAccountName default 运行工作流配置的 sa 需主动配置,否则为 ‘-’
workflow.uid 1652e654-4f0a-43ca-975f-c1f591d0cf39 UUID
workflow.parameters [{“name”: “key1”, “value”: “val1”}] 获取定义在 “WorkflowSpec.Arguments” 下的参数
workflow.parameters.json [{“name”: “key1”, “value”: “val1”}] 获取定义在 “WorkflowSpec.Arguments” 下的参数
workflow.outputs.parameters.{name} TODO; TODO;
workflow.outputs.artifacts.{name} TODO; TODO;
workflow.annotations {appname:hello-world} 获取工作流配置的注解
workflow.labels {appname:hello-world} 获取工作流配置的标签
workflow.creationTimestamp 2024-05-31T08:40:10Z 工作流创建的时间
workflow.priority 10 工作流优先级,需存在设置
workflow.duration 10.518252 工作流运行的持续时间,单位:秒
workflow.scheduledTime 2024-05-31T08:40:10Z 工作流被调度的时间,仅 CronWorkflow 类型有效

在 templates 中均可使用

变量名 描述
inputs.parameters 模板的所有输入参数都作为 JSON 字符串
inputs.parameters. 在模版中输入的参数
inputs.artifacts. 在模版中输入的附件
node.name 运行这个任务的 POD 名称,如:hello-world-dcntk

在 templates.steps 中使用

变量名 示例 描述
steps.name TODO; 该任务名称
steps..id TODO; 指定任务名称的唯一 ID
steps.{name}.id TODO; 根据前面任务的名,获取唯一任务 ID
steps.{name}.ip TODO; 需在该任务之前且为daemon的任务才可获取值
steps.{name}.status Succeeded 获取前面任务的运行状态
steps.{name}.exitCode 0 获取前面任务的运行退出状态码
steps.{name}.startedAt 2024-05-31T06:05:10Z 获取前面任务的开始运行时间
steps.{name}.finishedAt 2024-05-31T06:05:10Z 获取前面任务的完成运行时间
steps.{name}.outputs.result hello 获取前面任务完成时的标准输出
steps.{name}.outputs.parameters TODO; 获取前面任务使用 “withItems” 或者 “withParams” 运行,将会以 JSON 格式输出
steps.{name}.outputs.artifacts TODO; 获取前面任务的输出附件

在 templates.dag 中使用

变量名 示例 描述
tasks.name TODO 任务名
tasks.{name}.id TODO; 含义同 “templates.steps”
tasks.{name}.ip TODO 含义同 “templates.steps”
tasks.{name}.status TODO; 含义同 “templates.steps”
tasks.{name}.exitCode TODO; 含义同 “templates.steps”
tasks.{name}.startedAt TODO; 含义同 “templates.steps”
tasks.{name}.finishedAt TODO; 含义同 “templates.steps”
tasks.{name}.outputs.result TODO; 含义同 “templates.steps”
tasks.{name}.outputs.parameters TODO; 含义同 “templates.steps”
tasks.{name}.outputs.artifacts TODO; 含义同 “templates.steps”