一个步骤中可变数量的输入工件

Variable number of input artifacts into a step

我有一个菱形工作流,其中单个步骤 A 使用 withParam: 启动可变数量的分析作业 BX。作业数量基于动态信息,在第一步 运行s 之前是未知的。这一切都很好,除了我还想要一个聚合器作业 Y 到 运行 超过所有这些分析作业的输出:

     B  
    / \
   / C \
  / / \ \
 A-->D-->Y
  \  .  /
   \ . /
    \./
     X

每个分析作业 B-X 都编写工件,Y 需要将它们全部作为输入。我不知道如何为 Y 指定输入。这可能吗?我试过传入工件 key 的 JSON 数组,但 pod 卡在 pod 初始化过程中。我找不到有关如何执行此操作的任何示例。

A 创建了几个由 B-X 使用的工件(作为 withParam: 的一部分,每个作业一个)所以我知道我的工件存储库已设置正确设置。

每个作业 B-X 都需要很多 CPU 所以会 运行 在不同的节点上,所以我不认为共享volume 会起作用(虽然我对跨不同节点共享 volume 了解不多)。

我将问题发布为 GitHub 问题:

https://github.com/argoproj/argo/issues/4120

解决方案是将所有输出写入作业特定的工件路径(即相同的子目录)。然后,您将该路径指定为输入 key,argo 会将所有先前的结果解压缩到一个子目录中。您可以使用 {{workflow.name}} 创建唯一路径。

这确实意味着您只能使用工件存储库中的特定目录结构,但对我来说这是一个很小的代价。

如需完整的解决方案,请参阅 sarabala1979 在 GitHub 问题上的回答。