跳至内容

工作规避

v2.9及更高版本

通过采用工作避免策略,您可以使工作流运行得更快、更健壮。利用这一策略的工作流实际上就是一个包含多个步骤的流程,其中某些步骤在相关工作已完成时就不会执行。

这项技术与记忆化类似。工作规避完全由您掌控,您可以自行决定是否跳过某些工作。记忆化是Argo Workflows的一项功能,可自动跳过生成输出的步骤。在3.5版本之前,这需要指定outputs,但从3.5版本开始,您可以将记忆化应用于所有步骤和任务。

最简单的方法是使用标记文件

使用场景:

  • 一个高成本步骤出现在多个工作流中 - 您希望避免重复执行它们。
  • 工作流中存在不可靠的任务 - 您希望能够重新提交该工作流。

标记文件是一个用于指示工作已完成的状态文件。在执行任务前,您可以检查该标记是否已存在:

if [ -e /work/markers/name-of-task ]; then
    echo "work already done"
    exit 0
fi
echo "working very hard"
touch /work/markers/name-of-task

为文件选择一个在该任务中唯一的名称,例如模板名称和所有参数:

touch /work/markers/$(date +%Y-%m-%d)-echo-{{inputs.parameters.num}}

您需要在工作流之间存储标记文件,这可以通过使用PVC可选输入工件来实现。

这个完整的工作规避示例 包含以下内容:

  • 一个用于存储标记的PVC(持久卷声明)。
  • 一个load-markers步骤,用于从工件存储中加载标记文件。
  • 多个echo任务通过使用标记文件来避免重复工作。
  • 一个save-markers退出处理器,用于保存标记文件,即使它们并不需要。

有问题吗?

Search on GitHub Discussions and Slack.