Jenkins如何在测试失败时自动触发执行重启服务脚本
最简实现方案
不需要额外安装新插件,直接用单自由风格任务+Shell逻辑判断就能实现,比折腾MultiJob插件的编排逻辑简单可靠得多。
基础任务配置
- 新建一个自由风格(Freestyle)Jenkins任务,找到「构建触发器」配置项,勾选「定时构建」,日程规则填
H/5 * * * *,即可实现每5分钟自动执行一次任务。 - 在任务的「构建」环节新增「执行Shell」步骤(如果是Windows构建节点选对应批处理步骤即可),所有逻辑都可以写在这一个步骤里,不需要拆分多任务。
核心判断逻辑
Playwright测试执行完成后,用例全部通过会返回0退出码,存在失败用例则返回非0退出码,直接捕获这个退出码判断是否需要执行重启即可,不需要依赖插件的条件触发能力。
参考脚本如下:
#!/bin/bash # 切换到你的Playwright测试项目存放路径 cd /opt/playwright/health-check # 临时关闭脚本遇错自动终止的默认逻辑,方便捕获测试执行结果 set +e npx playwright test prod-health-check.spec.js TEST_EXIT_CODE=$? set -e if [ $TEST_EXIT_CODE -ne 0 ]; then echo "生产站点健康检查不通过,开始执行服务重启流程" # 替换成你实际的重启命令,注意提前给Jenkins运行用户配置生产环境的操作权限,推荐用免密SSH登录执行 ssh prod-admin@your-prod-ip "bash /data/scripts/restart-website.sh" fi
可选优化(避免误重启)
如果担心偶发的网络波动、临时资源占用导致测试误判触发不必要的重启,可以加个简单的连续失败计数防抖,只有连续2-3次检测失败才执行重启,逻辑也可以直接写在同一个Shell里:
# 失败计数文件存在Jenkins任务工作目录,不会丢失 FAIL_RECORD="./.health_fail_count" if [ $TEST_EXIT_CODE -ne 0 ]; then # 读取历史失败次数,没有记录则初始为0 CURRENT_COUNT=$(cat $FAIL_RECORD 2>/dev/null || echo 0) CURRENT_COUNT=$((CURRENT_COUNT + 1)) echo $CURRENT_COUNT > $FAIL_RECORD # 连续2次失败才触发重启,阈值可以自行调整 if [ $CURRENT_COUNT -ge 2 ]; then echo "连续${CURRENT_COUNT}次健康检查失败,执行服务重启" ssh prod-admin@your-prod-ip "bash /data/scripts/restart-website.sh" # 重启执行后重置失败计数 echo 0 > $FAIL_RECORD fi else # 测试通过直接重置失败计数 echo 0 > $FAIL_RECORD fi
补充说明
你之前用的MultiJob插件定位是多任务并行/串行编排,用来做单步骤失败的条件触发需要额外搭配条件构建类插件,配置链路长,后续维护也麻烦,远不如单脚本内判断的方案轻量稳定。
内容的提问来源于stack exchange,提问作者TeabagD
相关产品推荐
相关产品推荐

