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

Jenkins自由风格任务如何让后续构建步骤在前序步骤失败时仍执行

Jenkins自由风格任务允许指定步骤失败仍继续执行的解决方案

问题核心原因

Jenkins自由风格任务默认判定任何构建步骤返回非0退出码即为构建失败,会直接终止所有后续步骤;单Shell步骤默认开启set -e参数,任意命令执行失败会直接终止整个脚本运行,这就是你合并步骤后第二个命令仍不执行的原因。
错误示例

无插件解决方案(仅调整命令写法)

方案1:合并为单步骤,调整Shell执行参数

无需拆分步骤,仅修改原有合并后的Shell脚本,关闭-e选项即可让后续命令不受前序命令失败影响,同时可以保留BUILD_STATUS变量:

# 关闭「命令执行失败即终止脚本」的选项
set +e

# 第一个测试命令,替换为你的实际测试指令
your_test_command
TEST_EXIT_CODE=$?
# 保留BUILD_STATUS取值供后续报表使用
if [ ${TEST_EXIT_CODE} -ne 0 ]; then
  export BUILD_STATUS="FAILURE"
else
  export BUILD_STATUS="SUCCESS"
fi

# 第二个构建命令,无论测试结果都会正常执行
your_second_build_command

# 若需要最终构建结果和测试结果同步,末尾添加以下判断即可
if [ "${BUILD_STATUS}" = "FAILURE" ]; then
  exit 1
fi

如果使用Windows批处理脚本,对应写法如下:

:: 第一个测试命令,替换为你的实际测试指令
your_test_command
set TEST_EXIT_CODE=%errorlevel%

if %TEST_EXIT_CODE% NEQ 0 (
  set BUILD_STATUS=FAILURE
) else (
  set BUILD_STATUS=SUCCESS
)

:: 第二个构建命令,不受前序测试结果影响
your_second_build_command

:: 若需要最终构建结果和测试结果同步,添加以下判断
if %BUILD_STATUS% == FAILURE (
  exit /b 1
)

方案2:拆分两个独立步骤,调整测试步骤命令

如果你需要保留两个独立的构建步骤,仅修改第一个测试步骤的脚本,捕获退出码后强制返回0即可让Jenkins不中断后续步骤:

Shell脚本示例

# 替换为实际执行的测试命令
your_test_command
TEST_EXIT_CODE=$?

# 赋值BUILD_STATUS变量
if [ ${TEST_EXIT_CODE} -ne 0 ]; then
  export BUILD_STATUS="FAILURE"
else
  export BUILD_STATUS="SUCCESS"
fi
# 将变量写入属性文件供后续步骤读取
echo "BUILD_STATUS=${BUILD_STATUS}" > build.properties

# 强制返回0,告知Jenkins当前步骤执行成功,不中断后续流程
exit 0

注意:跨构建步骤的环境变量默认不共享,需安装EnvInject Plugin,在两个步骤之间添加「Inject environment variables」步骤,设置属性文件路径为build.properties,即可在第二个步骤中读取到BUILD_STATUS变量。

插件解决方案

安装Ignore Failure Plugin后,打开第一个测试构建步骤的高级设置,勾选「忽略该步骤的执行失败」选项即可。该方式无需修改原有命令,Jenkins会自动保留BUILD_STATUS的取值,同时继续执行后续所有构建步骤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:45:08