如何在.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
相关产品推荐
相关产品推荐

