ArgoWorkflow教程(六)---无缝实现步骤间参数传递

简介: 本文为ArangoWorkflow系列教程第六篇,详细介绍了在同一Workflow中不同步骤间如何实现参数传递,避免了通过文件传递的不便。文章重点讲解了导出结果和导入参数的方法,并演示了如何将上一步骤的输出参数作为下一步骤的输入参数。此外,还介绍了ArgoWorkflow内置的`result`参数,可用于捕获容器的标准输出。通过具体示例和代码片段,读者可轻松掌握这一重要功能。

集 - ArgoWorkflow(6)
1.
ArgoWorkflow
教程(二)---快速构建流水线:Workflow & Template 概念
08-20
2.
ArgoWorkflow
教程(一)--DevOps 另一选择?云原生 CICD 初体验
08-06
3.
ArgoWorkflow
教程(三)---使用 Artifacts 实现步骤间文件共享
08-29
4.
ArgoWorkflow
教程(四)---Workflow & 日志归档
09-13
5.
ArgoWorkflow
教程(五)---Workflow 的多种触发模式:手动、定时任务与事件触发
09-25
6.
ArgoWorkflow
教程(六)---无缝实现步骤间参数传递
10-10
收起
argoworkflow-6-parameter-passing-between-steps.png

之前我们分析了,Workflow、WorkflowTemplate 、template 3 者之间如何传递参数。

本文主要分析同一个 Workflow 中的不同 step 之间实现参数传递,比如将上一个步骤的输出作为下一个步骤的结果进行使用(而非以文件方式传递)。

概述
然后就是之前只分析了 Workflow、WorkflowTemplate 、template 3 者之间如何传递参数,今天继续分析一下步骤之间如何传递参数。
要实现步骤间参数传递,需要实现两个功能:

1)导出结果

2)导入参数

基于之前的知识,要实现这两个功能,可以想到的一种方式就是使用 artifact:

导出结果:将参数写入文件,然后以 artifact 保存到 s3
导入参数:下一个 step 下载 artifact 并从中获取参数。
确实可以实现功能,但是有点蹩脚,毕竟 artifact 主要是用于保存文件的。argoworkflow 中也直接提供了对应的 feature 来供大家使用。

步骤间参数传递
将结果导出为 Output Parameter
将上一步的 Output Parameter 导入为当前步骤的 Input Parameter
完整 Demo 如下:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: output-parameter-
spec:
entrypoint: output-parameter
templates:

name: output-parameter
steps:

name: generate-parameter
template: whalesay
name: consume-parameter
template: print-message
arguments:
parameters:
Pass the hello-param output from the generate-parameter step as the message input to print-message
name: message
value: "{ {steps.generate-parameter.outputs.parameters.hello-param}}"
name: whalesay
container:
image: docker/whalesay:latest
command: [sh, -c]
args: ["echo -n hello world > /tmp/hello_world.txt"] # generate the content of hello_world.txt
outputs:
parameters:

name: hello-param # name of output parameter
valueFrom:
path: /tmp/hello_world.txt # set the value of hello-param to the contents of this hello-world.txt
name: print-message
inputs:
parameters:

name: message
container:
image: docker/whalesay:latest
command: [cowsay]
args: ["{ {inputs.parameters.message}}"]
导出结果
name: whalesay
container:
image: docker/whalesay:latest
command: [sh, -c]
args: ["echo -n hello world > /tmp/hello_world.txt"] # generate the content of hello_world.txt
outputs:
parameters:
name: hello-param # name of output parameter
valueFrom:
path: /tmp/hello_world.txt # set the value of hello-param to the contents of this hello-world.txt
首先是 step 的内容,这里为了简单,就只有一个 echo 命令,将结果(hello world)写入到文件
/tmp/hello_world.txt 中。

然后就是到处结果了:

outputs:
parameters:

  • name: hello-param # name of output parameter
    valueFrom:
    path: /tmp/hello_world.txt # set the value of hello-param to the contents of this hello-world.txt
    定义了一个 output 参数,名为 hello-param,该参数的 value 从 /tmp/hello_world.txt 文件中获取,最终得到的 value 就是之前写入的 hello world。

至此,我们就讲当前步骤的结果导出成了一个 Output Parameter,可以在后续步骤使用了。

导入参数
后续步骤,其实很简单,和普通步骤一样的,通过 Input Parameter 定义参数,然后在使用的使用通过语法{ {inputs.parameters.name}} 引用即可。

name: print-message
inputs:
parameters:
name: message
container:
image: docker/whalesay:latest
command: [cowsay]
args: ["{ {inputs.parameters.message}}"]
唯一区别在于,这个参数的来源,之前我们都是直接讲参数定义在 Workflow 中的,这里需要改成引用之前步骤导出的 Output Parameter,就像这样:
spec:
entrypoint: output-parameter
templates:

name: output-parameter
steps:
name: generate-parameter
template: whalesay
name: consume-parameter
template: print-message
arguments:
parameters:
Pass the hello-param output from the generate-parameter step as the message input to print-message
name: message
value: "{ {steps.generate-parameter.outputs.parameters.hello-param}}"
在 arguments.parameters 中直接引用了之前步骤的 Output Parameter,语法为 { {steps.
parameterName}}。
之前我们导出结果的步骤名为 generate-parameter,然后导出的参数名为 hello-param,因此这里就使用{ {steps.generate-parameter.outputs.parameters.hello-param}} 来引用该参数。

内置的 result 参数
除了我们手动导出的参数之外,ArgoWorkflow 还会默认生成一个 Output Parameter,他就是 result。

和其他 Output Parameter 一样,可以通过 { {steps.
parameterName}} 语法进行引用。

这个 result 参数会捕获最大 256KB 的标准输出作为 value,因此他可以包含以下内容:

1)script 的运行结果
2)容器的标准输出
3)...
只要是在容器中输出到标准输出的,内容都可以被 result 捕获。

【ArgoWorkflow 系列】持续更新中,搜索公众号【探索云原生】订阅,阅读更多文章。

小结
本文主要分析了 Argo 中的 Workflow 中怎么传递参数还是比较简单的:
1)通过 Output Parameter 导出参数
2)在 arguments.parameters 中引用上一步导出的参数
最后介绍了一下内置的 result Output Parameter ,可以用于获取容器中的标准输出。

相关文章
|
4月前
|
JSON 运维 Serverless
函数计算产品使用问题之怎么使用ComfyUI功能
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
消息中间件 JavaScript 中间件
函数计算产品使用问题之WebIDE编写
本文解答了五个关于阿里云函数计算(FC)的常见问题:1)WebIDE编写的Node.js代码会自动打包部署,并建议将大型依赖打成自定义层;2)如何为fc-stable-diffusion-plus开通API功能;3)如何在代码中主动结束实例并重启新实例处理请求,提供了多种解决方案;4)如何在Koa框架中读取FC的invoke事件消息,给出详细示例代码;5)排查FC异步事件未触发的原因及解决方法,包括检查事件规则、配置和权限等。每项解答均包含具体操作建议及注意事项。更多详细信息,请点击链接查看。
62 0
|
4月前
|
运维 Serverless 数据处理
函数计算产品使用问题之Animatediff插件怎么安装
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
Java Maven Docker
几种常见的构建模式及其使用方法
几种常见的构建模式及其使用方法
82 3
|
6月前
|
运维 Serverless 网络安全
Serverless 应用引擎产品使用合集之能否用一个顶层函数,在云端动态的增加函数脚本或删除脚本
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
6月前
|
运维 JavaScript Serverless
函数计算产品使用问题之构建自己的流水线时,已经有一个基础第三方包的层,想在这个基础上进行额外的第三方包安装,该如何实现
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
Shell Python
技术经验解读:使用python脚本传递参数:(三种方式可收藏)
技术经验解读:使用python脚本传递参数:(三种方式可收藏)
52 0
|
6月前
|
Serverless 文件存储 Docker
函数计算产品使用问题之第三方插件无法正常工作,是为什么
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
前端开发 JavaScript
详尽分享组件的封装方法【比较高级方法】★★★★★★★
详尽分享组件的封装方法【比较高级方法】★★★★★★★
23 0
|
7月前
|
Web App开发 Java Serverless
Serverless 应用引擎操作报错合集之阿里函数计算中,使用自定义运行时部署程序时,发现Chrome层已经建立但运行程序仍然缺失如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。