根据 Argo DAG template documentation 。
tasks.<TASKNAME>.outputs.parameters
:当先前的任务使用'withItems'或'withParams'时,其中包含每个调用的输出参数映射的JSON数组
尝试以下简单工作流程:
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: test-workflow-
spec:
entrypoint: start
templates:
- name: start
dag:
tasks:
- name: with-items
template: hello-letter
arguments:
parameters:
- name: input-letter
value: "{{item}}"
withItems:
- A
- B
- C
- name: show-result
dependencies:
- with-items
template: echo-result
arguments:
parameters:
- name: input
value: "{{tasks.with-items.outputs.parameters}}"
- name: hello-letter
inputs:
parameters:
- name: input-letter
outputs:
parameters:
- name: output-letter
value: "{{inputs.parameters.input-letter}}"
script:
image: alpine
command: ["sh"]
source: |
echo "{{inputs.parameters.input-letter}}"
- name: echo-result
inputs:
parameters:
- name: input
outputs:
parameters:
- name: output
value: "{{inputs.parameters.input}}"
script:
image: alpine
command: ["sh"]
source: |
echo {{inputs.parameters.input}}
我会收到以下错误: 无法提交工作流:templates.start.tasks.show-- result无法解决{{tasks.with-items.outputs.parameters}}}
Argo版本(在Minikube群集中运行)
argo: v2.10.0+195c6d8.dirty
BuildDate: 2020-08-18T23:06:32Z
GitCommit: 195c6d8310a70b07043b9df5c988d5a62dafe00d
GitTreeState: dirty
GitTag: v2.10.0
GoVersion: go1.13.4
Compiler: gc
Platform: darwin/amd64
Argo 2.8.1中的同样错误,尽管使用 .result
而不是 .parameters
中的 [A,B,C]
,在show-result任务中工作正常(结果为 ```
- name: show-result
dependencies:- with-items
template: echo-result
arguments:
parameters:- name: input
value: "{{tasks.with-items.outputs.result}}"
- name: input
- with-items
STEP TEMPLATE PODNAME DURATION MESSAGE
⚠ test-workflow-parallelism-xngg4 start
├-✔ with-items(0:A) hello-letter test-workflow-parallelism-xngg4-3307649634 6s
├-✔ with-items(1:B) hello-letter test-workflow-parallelism-xngg4-768315880 7s
├-✔ with-items(2:C) hello-letter test-workflow-parallelism-xngg4-2631126026 9s
└-⚠ show-result echo-result invalid character 'A' looking for beginning of value
结果:
- name: show-result
dependencies:
- with-items
template: echo-result
arguments:
parameters:
- name: input
value: "{{tasks.with-items.outputs.parameters.output-letter}}"
我还试图将表演归因任务更改为:
STEP TEMPLATE PODNAME DURATION MESSAGE
✔ test-workflow-parallelism-qvp72 start
├-✔ with-items(0:A) hello-letter test-workflow-parallelism-qvp72-4221274474 8s
├-✔ with-items(1:B) hello-letter test-workflow-parallelism-qvp72-112866000 9s
├-✔ with-items(2:C) hello-letter test-workflow-parallelism-qvp72-1975676146 6s
└-✔ show-result echo-result test-workflow-parallelism-qvp72-3460867848 3s
没有任何错误执行:
argo logs test-workflow-parallelism-qvp72
test-workflow-parallelism-qvp72-1975676146: 2020-08-25T14:52:50.622496755Z C
test-workflow-parallelism-qvp72-4221274474: 2020-08-25T14:52:52.228602517Z A
test-workflow-parallelism-qvp72-112866000: 2020-08-25T14:52:53.664320195Z B
test-workflow-parallelism-qvp72-3460867848: 2020-08-25T14:52:59.628892135Z {{tasks.with-items.outputs.parameters.output-letter}}
但是参数未被值所取代:
我不明白将是循环输出的期望!我错过了什么?有没有办法找出正在发生的事情?
这是我遇到的一个很常见的问题,到目前为止,我还没有在任何错误报告或功能文档中遇到过这个问题,因此尚未确定这是一个功能还是错误。然而,argo 显然无法执行“map-reduce”流 OOB。
我发现的唯一“真正”解决方法是附加一个工件,将
with-items
任务输出写入它,然后将其传递到下一步,您将在代码/脚本中自己“减少”从工件中读取值。正如另一个答案所提到的,这确实是一个 bug 已针对最新版本解决,这解决了您作为选项提到的
parameters
的使用,但outputs.result
仍然会导致错误修复后的错误。