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

如何让调用Java程序的Shell脚本失败时触发Jenkins构建失败?

问题原因与解决方案

你的问题核心出在脚本最后一行的exit 0——不管前面的Java程序执行成功还是失败,这行命令都会强制让shell脚本返回状态码0(代表成功),而Jenkins正是通过脚本的最终退出码来判断构建状态的,所以哪怕Java程序抛出异常并退出,Jenkins依然会认为构建成功。

另外补充一点:虽然你设置了set -e(命令失败立即退出),但Java程序调用System.exit(-1)时,在shell环境中这个退出码会被转换为255(shell的退出码范围是0-255),属于非0的失败状态,理论上set -e应该让脚本在Java程序失败后立即退出,但因为你最后写了exit 0,脚本还是会执行到这一行,覆盖之前的失败状态。

修复方案

方案一:直接移除exit 0

修改后的myscript.sh:

#!/bin/bash

# exit immediately if any command fails
set -e

java MyJavaProgram

这样脚本会以最后一条命令(Java程序)的退出码作为自身的退出码。当Java程序失败时,脚本返回非0状态,Jenkins就会自动标记构建失败。

方案二:显式传递Java程序的退出码(如需后续操作)

如果需要在Java程序执行完成后做一些清理或其他操作,可以先捕获Java程序的退出码,最后再返回这个码:

#!/bin/bash

set -e

java MyJavaProgram
# 捕获Java程序的退出码
EXIT_STATUS=$?

# 这里可以添加成功后的清理、日志记录等操作
# 注意:如果后续操作可能失败,需要确保不会覆盖EXIT_STATUS

exit $EXIT_STATUS

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:50:01