如何让GitHub Workflow在命令执行失败时终止并标记为失败?
解决GitHub Actions脚本出错但工作流仍标记成功的问题
问题原因
GitHub Actions判断步骤是否成功,依据的是该步骤执行命令的最终退出码——只有当退出码为非零值时,才会标记步骤失败。而默认情况下,Bash脚本会继续执行后续命令,即便前面的命令出错;如果脚本最终的退出码是0(比如后续有执行成功的命令,或者脚本未设置错误终止逻辑),GitHub Actions就会判定该步骤成功。
解决方案
你可以通过以下几种方式强制脚本在出错时终止并返回非零退出码:
方法1:修改脚本本身,开启Bash严格模式
在update_docs.sh的最开头添加以下代码,让脚本遇到任何错误立即终止,并传递错误的退出码:
set -euo pipefail
-e:遇到命令执行失败(退出码非零)时立即终止脚本-u:引用未定义的变量时视为错误-pipefail:管道命令中任何一个环节失败,整个管道的退出码为失败命令的退出码
方法2:在GitHub Actions步骤中强制启用严格模式
无需修改脚本,直接在run命令中指定Bash以严格模式执行脚本:
- name: run the update_docs scripts run: bash -euo pipefail ./docs/update_docs.sh
方法3:手动控制脚本的退出码
如果脚本中有自定义的错误处理逻辑,确保在检测到错误时主动返回非零退出码。比如在报错后添加:
exit 1
内容的提问来源于stack exchange,提问作者Vince
相关产品推荐
相关产品推荐

