如何让 SonarQube(在 docker 容器中运行)从 Jenkins Pipeline 连接到 localhost:9000?

问题描述 投票:0回答:2

我在 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 networking sonarqube localhost
2个回答
1
投票

您面临的问题很可能与您运行詹金斯的方式有关。

我假设你还通过 docker 运行 jenkins。这意味着在 jenkins 的上下文中,localhost 不是您的主机系统,而是 jenkins 容器。这意味着您需要调整您的 sonarqube-url 以引用主机系统。

因此您有多种选择:

  1. 使用主机系统的公共IP
  2. 使用主机系统的docker ip
  3. 通过dns解析ip。 docker 有一个内部 DNS,如果这些容器在同一网络中运行,您通常可以通过容器名称访问它们。

旁注: 我不确定您使用的是 docker-compose 还是 kubernetes,但如果您没有使用它,您可能还想深入了解 docker-compose,因为它只是一个简单的 yaml-config,您可以在其中轻松启动服务器。


0
投票

我只是在 jenkins 中使用了 sonarqube 容器 IP 地址,它起作用了。

© www.soinside.com 2019 - 2024. All rights reserved.