Jenkins中SonarQube分析流水线构建失败问题求助
Jenkins SonarScanner连接SonarQube超时问题解决指南
问题核心
Jenkins流水线执行SonarQube分析时,触发SocketTimeoutException: Connect timed out错误,无法连接SonarQube服务器http://3.111.52.250:9000,导致分析终止。已确认SonarQube服务正常且其他设备可访问。
关键错误日志
ERROR: SonarQube server [http://3.111.52.250:9000] can not be reached Caused by: java.net.SocketTimeoutException: Connect timed out
排查与解决步骤
1. 测试Jenkins服务器到SonarQube的网络连通性
登录Jenkins所在服务器,执行以下命令直接验证网络链路:
- curl测试:
curl -v http://3.111.52.250:9000 - 端口连通性测试:
telnet 3.111.52.250 9000
若命令执行失败,需排查: - Jenkins服务器的出站防火墙/安全组是否允许访问9000端口;
- SonarQube服务器的入站防火墙/安全组是否放行Jenkins服务器的IP地址;
- 云环境下(如AWS)需确认VPC路由、对等连接等网络配置是否正确。
2. 检查SonarQube的绑定地址配置
编辑SonarQube的sonar.properties配置文件:
- 找到
sonar.web.host参数,若值为127.0.0.1,说明SonarQube仅监听本地回环地址,外部无法访问; - 修改为
0.0.0.0(允许所有IP访问)或Jenkins可访问的具体IP,保存后重启SonarQube服务。
3. 调整Java运行环境版本
SonarQube 10.4.1官方推荐Java 11或17作为运行环境,当前使用的Java 21存在潜在兼容性风险:
- 在Jenkins的SonarScanner工具配置中,切换Java运行环境为Java 11或17;
- 重新触发流水线,观察连接是否恢复。
4. 延长SonarScanner连接超时时间
若为网络延迟导致超时,可在SonarScanner命令中添加超时参数:
修改流水线中的执行命令,增加-Dsonar.ws.timeout=60(单位:秒,可根据网络情况调整):
/var/lib/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/Sonarqube-Scanner/bin/sonar-scanner \ -Dsonar.host.url=http://3.111.52.250:9000 \ -Dsonar.projectKey=Te-Website \ -Dsonar.projectBaseDir=/var/lib/jenkins/workspace/Automated-Pipeline \ -Dsonar.ws.timeout=60
5. 检查Jenkins代理配置
如果Jenkins服务器使用了HTTP代理,需确保SonarScanner适配代理规则:
- 编辑SonarScanner配置文件
/var/lib/jenkins/tools/hudson.plugins.sonar.SonarRunnerInstallation/Sonarqube-Scanner/conf/sonar-scanner.properties,添加代理配置(按需修改):sonar.http.proxyHost=你的代理地址 sonar.http.proxyPort=你的代理端口 sonar.http.nonProxyHosts=3.111.52.250 - 若无需代理,确认Jenkins全局配置和SonarScanner配置中均未设置多余代理参数,避免干扰连接。
6. 确认版本兼容性
SonarScanner 5.0.1理论上适配SonarQube 9.9 LTS及以上版本,若上述步骤无效,尝试升级SonarScanner到适配SonarQube 10.4.1的最新兼容版本后重新测试。
内容的提问来源于stack exchange,提问作者Aditya
相关产品推荐
相关产品推荐

