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

Jenkins中止构建后仍无法停止Selenium测试执行,如何解决?

问题描述

我在Jenkins的slave机器上配置了构建任务执行Selenium测试,但是当我在测试执行过程中中止Jenkins构建时,Jenkins并没有停止测试执行,ChromeDriver仍在持续运行后续测试。请问有没有办法在构建运行时终止测试执行?

可行解决方案

1. 在测试代码中捕获中止信号,主动关闭Driver

在测试代码里加入信号监听逻辑,一旦收到Jenkins中止构建发出的终止信号(比如SIGTERM),立刻调用driver.quit()来关闭ChromeDriver和浏览器实例,避免进程残留。

Java示例代码:

Runtime.getRuntime().addShutdownHook(new Thread(() -> {
    if (driver != null) {
        driver.quit();
    }
}));

Python示例代码:

import signal
from selenium import webdriver

driver = webdriver.Chrome()

def terminate_test(signal_num, frame):
    driver.quit()
    exit(0)

# 监听终止和中断信号
signal.signal(signal.SIGTERM, terminate_test)
signal.signal(signal.SIGINT, terminate_test)

2. 用Jenkins构建步骤强制清理进程

在Jenkins构建任务中添加清理步骤,在构建中止时直接杀死ChromeDriver和Chrome进程:

  • Linux/macOS:添加Execute shell步骤,执行命令:
    pkill -f chromedriver
    pkill -f chrome
    
  • Windows:添加Execute Windows batch command步骤,执行命令:
    taskkill /F /IM chromedriver.exe
    taskkill /F /IM chrome.exe
    

也可以安装Jenkins的Process Killer Plugin,可视化配置在构建中止时杀死指定进程。

3. 修改Jenkins Slave的进程终止策略

Jenkins默认只终止构建主进程,不会清理子进程。可以在Jenkins Slave的启动参数中添加:

-Dorg.jenkinsci.plugins.process_tree_killer.killMode=PROCESS_GROUP

这样中止构建时,Jenkins会杀死整个进程组,包括ChromeDriver这类子进程。

4. 容器化运行测试

将Selenium测试放到Docker容器中执行,当Jenkins中止构建时,直接停止并销毁容器,容器内的所有进程(包括ChromeDriver、浏览器)都会被彻底清理。比如使用Selenium官方的Chrome镜像,构建任务中启动容器运行测试,中止时执行docker stop <容器ID/名称>即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:15:36