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

如何在.gitlab-ci.yml的after_script中判断主任务执行成败?

在GitLab CI的after_script中判断主任务状态的方法

嗨,这个问题我之前在配置复杂的GitLab CI流水线时也碰到过,其实GitLab CI提供了现成的内置变量来帮你判断主任务的执行结果,给你分享两种实用的实现方式:

方法一:通过退出码判断

GitLab CI会把主任务的退出码存在$CI_JOB_EXIT_CODE变量里——0代表任务执行成功,非0则代表失败。你可以用Shell的条件判断来区分逻辑:

after_script:
  - if [ $CI_JOB_EXIT_CODE -eq 0 ]; then
      echo "主任务执行成功,启动成功专属清理流程";
      # 这里写成功时的清理操作,比如删除临时成功日志、发送成功通知等
      rm -rf ./temp_success_logs
    else
      echo "主任务执行失败,启动失败专属清理流程";
      # 这里写失败时的清理操作,比如保留错误日志、收集调试信息等
      cp ./error_logs ./failure_archives
    fi

方法二:通过任务状态字符串判断

还有一个更直观的变量$CI_JOB_STATUS,它的取值包括success(成功)、failed(失败)、canceled(取消)等状态值,适合用case语句处理多场景:

after_script:
  - case $CI_JOB_STATUS in
      success)
        echo "主任务成功,执行成功清理";
        rm -rf ./temp_workspace
        ;;
      failed)
        echo "主任务失败,执行失败清理";
        tar -czf ./failure_debug.tar.gz ./debug_files
        ;;
      canceled)
        echo "任务被用户取消,执行取消后的清理";
        rm -rf ./half_done_files
        ;;
    esac

小提示

这些都是GitLab CI原生内置的变量,不需要你手动定义,只要你的GitLab版本在11.0及以上(目前大部分在用的版本都满足这个要求)就能直接使用。另外要注意,after_script段的执行结果不会影响主任务的最终状态,所以你可以放心在这里编写各种清理逻辑,不用怕因为清理失败导致任务状态被篡改~

内容的提问来源于stack exchange,提问作者Daniel Griscom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:17:37