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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:39:08