【问题标题】:Cannot open connections to database. Sonar,Maven and Jenkins无法打开与数据库的连接。声纳、Maven 和 Jenkins
【发布时间】:2013-07-22 10:14:03
【问题描述】:

我正在使用 maven 的 sonar:sonar 目标在我的 Jenkins 工作中生成 Sonar 报告。

我的 Jenkins 主机名是:jenhost.tst.com,我的声纳主机是 sonhost.tst.com,我的声纳 jdbc url 是:jdbc:mysql://sonhost.tst.com:3306/sonar,这个数据库有使用适当权限创建的用户名声纳。

现在在运行 Maven 目标时,我收到了错误:

无法打开与数据库的连接:用户 'sonar'@jenhost.tst.xxxx.com' 的访问被拒绝(使用密码:YES)

上述错误中的奇怪之处在于声纳用户试图以数据库名称而不是声纳主机访问我的 Jenkins 主机。

我检查了我的 Maven settings.xml,Sonar 的数据库 URL 在那里正确提及,并且在 Jenkins 中也正确提及。

有人知道这件事吗?

【问题讨论】:

  • 嗨,我重新检查了我的 sonarhost 上的 sonar.properties 文件,它看起来不错:sonar.jdbc.url: jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8 sonar.jdbc.driverClassName: com.mysql.jdbc.Driver sonar.jdbc.validationQuery: select 1

标签: maven jenkins sonarqube


【解决方案1】:

如果 Sonar 插件连接到 localhost,则表明它正在使用默认设置。

使用 Maven,可以通过多种方式配置 Sonar。

Jenkins 插件

jenkins 的sonar plugin 是启用 Sonar 的最简单方法。声纳属性集中管理

Maven 设置

将以下配置文件添加到您的 Maven 设置文件 ($HOME/.m2/settings.xml)

<settings>
    ..
    <profiles>
        <profile>
            <id>sonar</dev>
            <activeByDefault>true</activeByDefault>
            <properties>
                <sonar.host.url>XXXXX</onar.host.url>
                <sonar.jdbc.url>YYYYY</sonar.jdbc.url>
                ..
                ..
            </properties>
        </profile>
        ..
    </profiles>
    ..
</settings>

阅读以下答案,了解跨多个 Jenkins 项目管理 Maven 设置文件的简单方法:

Maven 属性

您可以在 POM 中设置 Sonar 属性,如下所示:

<properties>
    <sonar.host.url>XXXXX</onar.host.url>
    <sonar.jdbc.url>YYYYY</sonar.jdbc.url>
    ..
    ..
</properties>

或者使用 properties plugin 将您的 sonar.properties 文件导入到您的构建中

我倾向于前两种方法中的一种。此选项需要更改项目中的文件。永远不要将密码之类的项目提交到版本控制中。

【讨论】:

  • &lt;profile&gt; &lt;id&gt;sonar&lt;/id&gt; &lt;activation&gt; &lt;activeByDefault&gt;true&lt;/activeByDefault&gt; &lt;/activation&gt; &lt;properties&gt; &lt;sonar.jdbc.urrl&gt;jdbc:mysql://sonhost:3306/sonar&lt;/sonar.jdbc.url&gt; &lt;sonar.jdbc.username&gt;sonar&lt;/sonar.jdbc.username&gt; &lt;sonar.jdbc.password&gt;sonar&lt;/sonar.jdbc.password&gt; &lt;sonar.jdbc.driver&gt;com.mysql.jdbc.Driver&lt;/sonar.jdbc.driver&gt; &lt;!-- Optional URL to server. Default value is http://localhost:9000 --&gt; &lt;sonar.host.url&gt; http://sonhost:9000/ &lt;/sonar.host.url&gt; &lt;/properties&gt; &lt;/profile&gt;
  • 那么这个设置文件可能没有被拾取。确定使用“-s”选项运行 Maven 构建。不要假设它会拾取文件。请记住,您的 $HOME 目录可能与 Jenkins 不同。
  • 刚刚用 -s 选项运行它,但它仍然给出同样的错误。
  • @user2362314 我发现有趣的是,当您使用 Jenkins 的 Sonar 插件时,它也不起作用.....很奇怪。也许在调试模式下运行 Maven,也许你会看到属性分配和它们的值。否则我似乎没有更多建议(你没有结合上述方法?想知道一个属性分配是否可能会覆盖另一个)
  • @user2362314 Sonar 使用 URL 进行 REST API 调用以检索操作设置(分析工具规则等)。数据库 URL 用于在完成源代码分析后上传度量结果。 db url 的默认值为“localhost”。如果它解析到 Jenhost,则表明 Maven 正在为您环境中某处的该属性获取一个覆盖值。
【解决方案2】:

在这里查看类似的问题,得到

... [DEBUG] 为防止内存泄漏,已强制注销 JDBC Driver [com.mysql.jdbc.Driver] [DEBUG] 删除临时目录 ...

以后

[错误] 无法在项目 commons-mdh 上执行目标 org.codehaus.mojo:sonar-maven-plugin:2.0:sonar (default-cli):无法执行声纳:无法连接到数据库:无法创建 PoolableConnectionFactory(通信链接失败 [错误] [错误] 最后一个成功发送到服务器的数据包是 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。):连接被拒绝

只是为了发现,用telnet连接到mysql,mysql拒绝连接。

telnet:无法连接到远程主机:连接被拒绝

因此,请确保您可以从 jenkins 连接到声纳和 mysql。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多