Azure DevOps流水线Sonarqube准备分析步骤失败报ETIMEDOUT错误
问题根因定位与解决方案
核心报错说明
##[error][SQ] API GET '/api/server/version' failed, error was: {"code":"ETIMEDOUT","errno":"ETIMEDOUT","syscall":"connect","address":"172.28.4.132","port":9000}
该报错为网络连接超时错误,本质是Azure DevOps流水线运行的代理节点,无法和部署在172.28.4.132虚拟机上的SonarQube服务建立TCP连接,不属于SonarQube接口本身的逻辑报错。
排查步骤与对应解决方案
- 验证SonarQube服务本地可用性
登录IP为172.28.4.132的SonarQube虚拟机,本地执行命令curl http://localhost:9000/api/server/version:- 若正常返回SonarQube版本号,说明服务本身运行正常,继续排查网络链路问题
- 若无法返回结果,检查SonarQube进程是否存活、9000端口是否被虚拟机本地防火墙拦截、SonarQube配置是否绑定
0.0.0.0地址(默认只绑定本地地址的话无法接受外部访问)
- 验证流水线代理到SonarQube的网络连通性
根据你使用的代理类型选择对应排查方式:- 自托管代理:登录到代理所在的服务器,执行命令
curl http://172.28.4.132:9000/api/server/version测试连通性。如果不通,检查代理服务器的出口防火墙、两台机器之间的网络ACL、云平台安全组规则是否允许9000端口的双向访问,确认两个节点属于可互通的网络域,没有网段隔离、NAT不可达问题。 - 微软托管代理:托管代理默认运行在微软的公网环境下,无法直接访问你的私有IP段SonarQube服务。要么将SonarQube服务开放公网访问并配置白名单允许微软托管代理网段接入,要么更换为和SonarQube同网络域的自托管代理运行分析任务。
- 自托管代理:登录到代理所在的服务器,执行命令
- 校验SonarQube服务端点配置
确认Azure DevOps中配置的SonarQube服务端点地址、访问Token填写正确,没有拼写错误,Token具备访问SonarQube基础接口的最小权限。 - 排查代理服务器的正向代理配置
如果你的流水线代理需要通过正向代理访问外部服务,需确认代理配置已正确传递给SonarQube扫描任务,可在分析任务的环境变量中添加SONAR_SCANNER_OPTS参数配置代理:SONAR_SCANNER_OPTS=-Dhttp.proxyHost=<你的代理地址> -Dhttp.proxyPort=<代理端口> -Dhttps.proxyHost=<你的代理地址> -Dhttps.proxyPort=<代理端口>
内容的提问来源于stack exchange,提问作者Alasia Puckett
相关产品推荐
相关产品推荐

