输入输出
3 分钟阅读
简要概述
在工作流中参数的输入,结果的输出。
在工作流模版中定义参数,以提供任务运行时读取。
配置参数输入
在模版中定义
为任务输入参数可以在以下几个地方设置:
- 在 “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
...
- 在 “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 }}"]
- 在 “spec.templates.steps” 使用 “arguments.parameters” 设置;
数据结构见 Template.ParallelSteps 下 WorkflowStep。
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 }}"]
- 在 “spec.templates.dag” 中使用 “arguments.parameters” 设置。
Template.DAGTemplate 下 DAGTask
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. |
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” |
最后修改 2025.05.03: chore: 开发 argo workflow 一些内容 (7e2486e)