在 Kubernetes Argo Workflow 中,不同步骤之间可以通过使用 artifacts 来共享数据(包括文件和文件夹)。artifacts 可以通过 Workflow Spec 的 outputs 和 inputs 字段进行定义和引用。
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
namespace: kubeflow
name: wf32
spec:
entrypoint: main
serviceAccountName: ml-pipeline
hostNetwork: true
imagePullSecrets:
- name: harbor-secret
templates:
- name: main
steps:
- - name: step1
template: get-code
- - name: step2
template: get-data
arguments:
artifacts:
- name: abc
from: "{{steps.step1.outputs.artifacts.step1-code}}"
- name: get-code
container:
image: xxxx/system-diy/git-clone:v2
command: ["/bin/sh","-c", "/usr/local/git.sh br_0 http://user:token@xxxx/a.git"]
outputs:
artifacts:
- name: step1-code
path: /usr/local/code
- name: get-data
container:
image: alpine:latest
command: ["/bin/sh","-c"]
args: ["cat /usr/local/a/x324/abc.txt"]
inputs:
artifacts:
- name: abc
path: /usr/local
在这里例子中,第一个步骤step1 使用模板get-code,将代码从gitlab上下载回来(镜像内部处理是放到/usr/local/code下),并将路径path为 /usr/local/code下的所有内容生成一个名字叫 step1-code的artifact,默认是打包的。
步骤2中,
arguments:
artifacts:
- name: abc
from: “{{steps.step1.outputs.artifacts.step1-code}}”
是将第一步中的输出作为参数传入,名字为abc.
在模板get-data执行时,
使用
inputs:
artifacts:
- name: abc
path: /usr/local
将名字为abc的文件解压并放到路径 path /usr/local下。
以此来实现 第一步骤的输出作为第二步骤的输入。