You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:36:02