Argo Workflow如何实现审批驳回后返回指定节点重跑的条件循环DAG
Argo Workflow 实现审批驳回跳回指定节点的可行方案
Argo 原生DAG虽然不允许存在循环结构,但可以通过以下3种生产环境常用的方案实现需求:
方案1:递归调用工作流模板 + 重入点参数标记
该方案侵入性最低,是最推荐的落地方式:
- 先拆分工作流为多个独立可复用的步骤模板,给所有允许跳回的节点分配唯一的
entryId标识 - 工作流入口新增2类全局参数:
retryEntryId(标记重入节点ID,空值代表首次执行)、历史步骤输出参数/制品引用 - 所有高成本步骤添加
when条件判断:仅当retryEntryId为空,或retryEntryId指定的节点在当前步骤下游时才执行,否则直接复用传入的历史输出,跳过执行 - 末端人工审批步骤设置两个分支:
- 审批通过:直接标记工作流成功结束
- 审批驳回:调用
argo submit重新提交当前工作流模板,传入需要跳回的retryEntryId和所有上游已完成步骤的输出参数、制品地址
核心逻辑示例如下:
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: conditional-retry- spec: entrypoint: main arguments: parameters: - name: retryEntryId default: "" - name: preprocessResult default: "" templates: - name: main dag: tasks: # 高成本预处理步骤,重跑时直接跳过 - name: high-cost-preprocess when: "{{workflow.parameters.retryEntryId}} == ''" template: preprocess-template - name: param-adjust-step when: "{{workflow.parameters.retryEntryId}} == '' || {{workflow.parameters.retryEntryId}} == 'param-adjust-step'" template: param-input-template dependencies: [high-cost-preprocess] - name: business-exec-step template: business-template dependencies: [param-adjust-step] - name: manual-approval template: approval-template dependencies: [business-exec-step] # 驳回时重新提交工作流 - name: resubmit-on-reject when: "{{tasks.manual-approval.outputs.parameters.approval-result}} == 'REJECT'" template: argo-cli-template arguments: parameters: - name: cmd value: > argo submit {{workflow.name}} -n {{workflow.namespace}} -p retryEntryId=param-adjust-step -p preprocessResult={{tasks.high-cost-preprocess.outputs.parameters.result}}
方案2:原生循环步骤封装 + 条件判断
适合工作流规模较小的场景,不需要额外提交新工作流:
- 把全流程封装为一个循环模板,用全局参数
approvalStatus控制循环是否终止 - 所有步骤添加执行条件,仅当步骤未在之前的循环中完成时才执行,已完成的步骤直接复用历史产出
- 审批驳回时修改
approvalStatus为REJECT,触发下一轮循环,从指定节点开始执行
方案3:手动修改节点状态 + 重试
适合重跑频次极低的场景,不需要修改工作流代码:
- 给需要支持重跑的节点配置支持多次重试的
retryStrategy - 审批驳回时,手动将目标重入节点到审批节点之间的所有步骤状态修改为
Failed,保留上游高成本步骤的Succeeded状态 - 触发工作流重试,Argo会自动从第一个失败节点开始执行,不会重跑上游已成功的步骤
注意如果需要长期可复用的能力,优先选择方案1,制品和参数的传递都可以通过Argo原生能力实现,不需要额外的外部状态存储,稳定性最高。
内容的提问来源于stack exchange,提问作者Ziqi Liu
相关产品推荐
相关产品推荐

