我在 CentOS VM 内的 java 和 javascript 代码上运行 SonarQube。我提取了 sonarqube docker 映像并正在运行容器。我公开了端口 9000,并且能够打开 localhost:9000 并与 sonarqube gui 交互。当我使用以下命令从 JavaScript 代码的命令行运行声纳扫描仪时:
sonar-scanner -Dsonar.projectKey=javascript_code -Dsonar.sources=. -Dsonar.host.url=http://localhost:9000 -Dsonar.login=admin -Dsonar.password=admin
我得到了一个经过全面分析的项目。除了 JavaScript 代码之外,我还可以使用 maven 构建在 Java 代码上运行它。两者都可以在命令行下正常工作。
当我将其添加到 Jenkins Pipeline 中时,我执行完全相同的命令并得到以下结果:
Error: SonarQube server [http://localhost:9000] can not be reached
Caused by: Fail to get bootstrap index from server
Caused by: Failed to connect to localhost:9000
Caused by: Connection refused (Connection refused)
我也尝试在启动容器时使用 --network="host" 而不是发布端口 9000,但它仍然无法从 Jenkins Pipeline 连接。当我从命令行运行命令时,当我尝试将其放入 Jenkins 管道时,一切正常。
关于如何解决这个问题有什么建议吗?谢谢。
*编辑:使用 sonarqube 插件,我能够将我的分析作为 Jenkins 作业运行。但是,当我尝试将分析添加到管道中时,我收到相同的 SonarQube 服务器无法访问错误。它说它跳过了我的项目,因为由于之前的失败,该项目已被禁止构建,并给了我以下错误消息:
[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.5.0.1254:sonar (default-cli) on project sonarqubeproj:
Unable to execute SonarQube: Fail to get bootstrap index from server: unexpected end of stream on Connection{localhost:9000, proxy=DIRECT hostAddress=localhost/127.0.0.1:9000 cipherSuite=none protocol=http/1.1}: \n not found: limit=0 content=… -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.5.0.1254:sonar (default-cli) on project feedback-tool-ui: Unable to execute SonarQube
您面临的问题很可能与您运行詹金斯的方式有关。
我假设你还通过 docker 运行 jenkins。这意味着在 jenkins 的上下文中,localhost 不是您的主机系统,而是 jenkins 容器。这意味着您需要调整您的 sonarqube-url 以引用主机系统。
因此您有多种选择:
旁注: 我不确定您使用的是 docker-compose 还是 kubernetes,但如果您没有使用它,您可能还想深入了解 docker-compose,因为它只是一个简单的 yaml-config,您可以在其中轻松启动服务器。
我只是在 jenkins 中使用了 sonarqube 容器 IP 地址,它起作用了。