问题描述
我有一个菱形样式的工作流程,其中一步A
使用B
启动了可变数量的分析作业X
至withParam:
。作业数量基于动态信息,并且直到第一步运行之前才知道。这一切都很好,除了我还希望单个聚合器作业Y
覆盖所有这些分析作业的输出:
B
/ \
/ C \
/ / \ \
A-->D-->Y
\ . /
\ . /
\./
X
每个分析作业B
-X
都会写入工件,而Y
需要将所有工件作为输入。我不知道如何为Y
指定输入。这可能吗?我尝试传递工件key
的JSON数组,但是pod停留在pod初始化上。我找不到有关如何执行此操作的示例。
A
创建了多个B
-X
消耗的工件(每个作业一个withParam:
的一部分),因此我知道我的工件存储库已正确设置
B
-X
的每个作业都需要大量CPU,因此将在不同的节点上运行,因此我认为共享卷无法正常工作(尽管我不太了解)关于在不同节点之间共享卷)。
解决方法
我将问题发布为GitHub问题:
https://github.com/argoproj/argo/issues/4120
解决方案是将所有输出写入特定于作业的工件路径(即同一子目录)。然后,您将该路径指定为输入key
,而argo会将所有先前的结果解压缩到一个子目录中。您可以使用{{workflow.name}}
创建唯一路径。
这确实意味着您被限制在工件存储库中的特定目录结构上,但是对我来说这是一个很小的代价。
有关完整的工作解决方案,请参见sarabala1979在GitHub问题上的回答。