工作规避¶
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退出处理器,用于保存标记文件,即使它们并不需要。