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

如何根据前置阶段失败状态将后续作业设置为手动触发

GitLab CI 对应场景配置方案

你可以通过内置作业状态判断+dotenv变量跨作业传递+rules条件触发的组合方式实现需求,全程使用GitLab CI原生能力,不需要依赖第三方工具。

1. 修改Teardown作业配置

保留你原有的allow_failure: true配置,新增状态透传逻辑:不管Teardown执行成功还是失败,都把最终执行状态写入变量文件,通过dotenv报告传递给下游作业。
参考配置如下:

teardown:
  stage: Teardown
  allow_failure: true # 原有配置保留
  script:
    # 此处保留你原有的删除K8s已部署应用的全部逻辑,例如kubectl delete相关命令
    - kubectl delete -f ./app-deploy.yaml
  after_script:
    # after_script段无论作业成功失败都会强制执行,适合用来采集作业最终状态
    - |
      if [ "$CI_JOB_STATUS" = "success" ]; then
        echo "TEARDOWN_EXIT_STATUS=success" > job_status.env
      else
        echo "TEARDOWN_EXIT_STATUS=failed" > job_status.env
      fi
  artifacts:
    when: always # 核心配置:无论作业成败都上传状态制品,否则失败场景下下游拿不到变量
    reports:
      dotenv: job_status.env

2. 修改Destroy作业配置

移除Destroy作业原来全局配置的自动触发规则,改用rules根据透传的Teardown状态动态决定触发方式:

  • Teardown执行成功时,Destroy自动运行
  • Teardown执行失败时,Destroy改为手动触发,阻塞流水线等待人工核查后操作
    参考配置如下:
destroy:
  stage: Destroy
  needs: [teardown] # 明确依赖Teardown作业,确保优先拿到透传的状态变量
  script:
    # 此处保留你原有的删除K8s集群、清理关联资源的全部逻辑
    - terraform destroy -auto-approve
  rules:
    # Teardown成功场景:自动执行
    - if: $TEARDOWN_EXIT_STATUS == "success"
      when: on_success
    # Teardown失败场景:手动触发,阻塞流水线等待人工确认
    - if: $TEARDOWN_EXIT_STATUS == "failed"
      when: manual
      allow_failure: false

关键注意事项

  • 不要在Destroy作业上配置全局的when: always,该配置优先级高于rules,会导致条件触发规则失效
  • 如果你的GitLab实例版本低于13.5(不支持dotenv报告),可以把状态写入普通文本制品,在Destroy作业的script开头拉取制品读取状态值做判断即可,逻辑完全一致
  • when: manual搭配allow_failure: false时,流水线会停在待确认状态,不会直接标记为成功/失败,符合你核查问题后再执行的需求

内容的提问来源于stack exchange,提问作者Jor-El

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 22:57:25