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
相关产品推荐
相关产品推荐


