输入输出

简要概述

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

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

配置参数输入

在模版中定义

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

  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.namehello-world-5x7vm工作流名称
workflow.namespacedefault工作流运行命名空间
workflow.mainEntrypointmain工作流入口任务名称
workflow.serviceAccountNamedefault运行工作流配置的 sa 需主动配置,否则为 ‘-’
workflow.uid1652e654-4f0a-43ca-975f-c1f591d0cf39UUID
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.creationTimestamp2024-05-31T08:40:10Z工作流创建的时间
workflow.priority10工作流优先级,需存在设置
workflow.duration10.518252工作流运行的持续时间,单位:秒
workflow.scheduledTime2024-05-31T08:40:10Z工作流被调度的时间,仅 CronWorkflow 类型有效

在 templates 中均可使用

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

在 templates.steps 中使用

变量名示例描述
steps.nameTODO;该任务名称
steps..idTODO;指定任务名称的唯一 ID
steps.{name}.idTODO;根据前面任务的名,获取唯一任务 ID
steps.{name}.ipTODO;需在该任务之前且为daemon的任务才可获取值
steps.{name}.statusSucceeded获取前面任务的运行状态
steps.{name}.exitCode0获取前面任务的运行退出状态码
steps.{name}.startedAt2024-05-31T06:05:10Z获取前面任务的开始运行时间
steps.{name}.finishedAt2024-05-31T06:05:10Z获取前面任务的完成运行时间
steps.{name}.outputs.resulthello获取前面任务完成时的标准输出
steps.{name}.outputs.parametersTODO;获取前面任务使用 “withItems” 或者 “withParams” 运行,将会以 JSON 格式输出
steps.{name}.outputs.artifactsTODO;获取前面任务的输出附件

在 templates.dag 中使用

变量名示例描述
tasks.nameTODO任务名
tasks.{name}.idTODO;含义同 “templates.steps”
tasks.{name}.ipTODO含义同 “templates.steps”
tasks.{name}.statusTODO;含义同 “templates.steps”
tasks.{name}.exitCodeTODO;含义同 “templates.steps”
tasks.{name}.startedAtTODO;含义同 “templates.steps”
tasks.{name}.finishedAtTODO;含义同 “templates.steps”
tasks.{name}.outputs.resultTODO;含义同 “templates.steps”
tasks.{name}.outputs.parametersTODO;含义同 “templates.steps”
tasks.{name}.outputs.artifactsTODO;含义同 “templates.steps”