M1(ARM64)机器Jenkins集成Selenium Grid节点启动失败问题
问题:Jenkins集成Selenium节点时出现SocketTimeoutException(M1 ARM64环境)
环境配置
在M1(ARM64)机器上通过以下docker-compose.yml部署1个Selenium Hub、2个Chromium节点及Jenkins服务,执行命令:docker-compose up --scale chrome=2
version: '3.7' services: chrome: image: seleniarm/node-chromium volumes: - /dev/shm:/dev/shm environment: - SE_EVENT_BUS_HOST=seleniarm-hub - SE_EVENT_BUS_PUBLISH_PORT=4442 - SE_EVENT_BUS_SUBSCRIBE_PORT=4443 - SE_NODE_MAX_SESSIONS=2 - SE_NODE_OVERRIDE_MAX_SESSIONS=true - SE_NODE_SESSION_TIMEOUT=300 depends_on: - seleniarm-hub networks: - jenkins-network seleniarm-hub: image: seleniarm/hub container_name: seleniarm-hub ports: - "4442:4442" - "4443:4443" - "4444:4444" networks: - jenkins-network jenkins: image: jenkins/jenkins:lts restart: unless-stopped privileged: true user: root ports: - 8080:8080 container_name: jenkins volumes: - ~/jenkins:/var/jenkins_home - /var/run/docker.sock:/var/run/docker.sock - /usr/local/bin/docker:/usr/local/bin/docker networks: - jenkins-network networks: jenkins-network: driver: bridge
问题现象
- 本地配置Selenium Hub远程URL后运行脚本正常,确认Hub与节点工作正常
- Jenkins已安装Selenium插件且能连接Hub,但集成节点时触发错误,Jenkins启动日志如下:
jenkins | 2023-03-06 05:35:54.088+0000 [id=23] INFO jenkins.model.Jenkins#<init>: Selenium node launch failedAccept timed out jenkins | 2023-03-06 05:35:54.089+0000 [id=23] WARNING jenkins.model.Jenkins#<init>: Exception in onOnline() for the computer listener class hudson.plugins.selenium.ComputerListenerImpl on the built-in node jenkins | java.net.SocketTimeoutException: Accept timed out jenkins | at java.base/java.net.PlainSocketImpl.socketAccept(Native Method) jenkins | at java.base/java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:474) jenkins | at java.base/java.net.ServerSocket.implAccept(ServerSocket.java:565) jenkins | at java.base/java.net.ServerSocket.accept(ServerSocket.java:533) jenkins | at hudson.plugins.selenium.process.SeleniumProcessUtils.createSeleniumRCVM(SeleniumProcessUtils.java:96) jenkins | at hudson.plugins.selenium.callables.SeleniumCallable.invoke(SeleniumCallable.java:94) jenkins | Caused: java.io.IOException: Selenium node launch interrupted jenkins | at hudson.plugins.selenium.callables.SeleniumCallable.invoke(SeleniumCallable.java:118) jenkins | at hudson.plugins.selenium.callables.SeleniumCallable.invoke(SeleniumCallable.java:23) jenkins | at hudson.FilePath.act(FilePath.java:1192) jenkins | at hudson.FilePath.act(FilePath.java:1175) jenkins | at hudson.plugins.selenium.process.SeleniumJarRunner.start(SeleniumJarRunner.java:42) jenkins | at hudson.plugins.selenium.configuration.global.SeleniumGlobalConfiguration.start(SeleniumGlobalConfiguration.java:50) jenkins | at hudson.plugins.selenium.PluginImpl.startSeleniumNode(PluginImpl.java:503) jenkins | at hudson.plugins.selenium.ComputerListenerImpl.onOnline(ComputerListenerImpl.java:30) jenkins | at jenkins.model.Jenkins.<init>(Jenkins.java:1025) jenkins | at hudson.model.Hudson.<init>(Hudson.java:86) jenkins | at hudson.model.Hudson.<init>(Hudson.java:82) jenkins | at hudson.WebAppMain$3.run(WebAppMain.java:247)
已排查操作
- 检查Selenium Hub及节点日志,未发现异常
- 确认Selenium Grid与Jenkins使用的Java版本一致(openjdk 11.0.18 2023-01-17)
- 添加自定义Docker网络确保Jenkins与节点通信,问题未解决
解决方案
核心原因
Jenkins Selenium插件默认会尝试在Jenkins内置节点上自动启动一个Selenium RC节点,但ARM64环境下插件自带的Selenium二进制文件存在兼容性问题,导致启动超时。我们已经通过Docker部署了独立的Selenium节点,无需插件自动启动。
操作步骤
- 登录Jenkins后台,进入Manage Jenkins -> Configure System
- 找到Selenium Grid Configuration配置区域
- 取消勾选Start Selenium node automatically选项
- 在Selenium Hub URL中填写Docker网络内的Hub地址:
http://seleniarm-hub:4444/wd/hub - 保存配置,重启Jenkins容器
完成后,Jenkins将直接使用已部署的Docker Selenium节点,不会再尝试自动启动内置节点,即可解决超时问题。
内容的提问来源于stack exchange,提问作者vivek
相关产品推荐
相关产品推荐

