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

时间:2019-01-03 21:34:11

标签: docker jenkins networking sonarqube localhost

我在CentOS VM内的java和javascript代码上都运行SonarQube。我拉了sonarqube码头工人图像并正在运行容器。我暴露了端口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管道中时,我执行完全相同的命令并获得以下信息:

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 Job运行。但是,当我尝试将分析添加到管道中时,无法得到相同的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

1 个答案:

答案 0 :(得分:0)

您面临的问题很可能与运行jenkins有关。

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

因此,您有多种选择:

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

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