1

我正在使用 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' 的访问被拒绝(使用密码:是)

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

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

有没有人对此有任何线索?

4

2 回答 2

6

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

使用 Maven,有几种方法可以配置 Sonar。

詹金斯插件

jenkins的声纳插件是启用声纳的最简单方法。声纳属性集中管理

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>

或者使用属性插件将您的 sonar.properties 文件导入您的构建

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

于 2013-07-24T07:13:29.610 回答
0

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

...
[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。

于 2013-08-09T08:57:53.270 回答