在 Gradle 构建中配置多个 SonarQube 实例
Configure Multiple SonarQube Instances in a Gradle Build
在我们的 CI 环境中,我们目前有一个构建服务器(基于 Atlassian Bamboo)和两个 SonarQube 实例(版本 6.0 和 6.5)。最初,我们的 CI 服务器配置为与 6.0 SonarQube 实例通信。这已在我们的 CI 服务器上的 /home/bamboo/.gradle/gradle.properties
文件中配置如下:
systemProp.sonar.host.url=<http url of SonarQube 6.0 instance>
systemProp.sonar.login=<username here>
systemProp.sonar.password=<password here>
现在我们的 CI 服务器上有另一个基于 Gradle 的项目 运行,它将与新的 SonarQube 6.5 实例通信。我尝试配置它,但一直失败。
到目前为止我所做的事情:
向 gradle 包装器命令添加了命令行参数:
我尝试将 -Dsonar.host.url=
、-Dsonar.login=
、-Dsonar.password=
添加到 Gradle 命令。由于这似乎不起作用,我还尝试使用 -DsystemProp.sonar.host.url=
、-DsystemProp.sonar.login=
、-DsystemProp.sonar.password=
将命令行参数设置为 SonarQube 系统属性。这也没有用。
向 build.gradle 文件添加了属性
- 将属性添加到 build.gradle
文件,如下所示:
sonarqube {
properties {
property "sonar.host.url", "<http url of SonarQube 6.0 instance>"
property "sonar.login", "<username here>"
property "sonar.password", "<password here>"
...<other SonarQube analysis settings here>...
}
}
在所有情况下,CI 服务器与错误的 SonarQube 实例 (6.0) 通信。我的问题是,是否可以配置一个项目来与另一个 SonarQube 实例对话。如您所见,我们使用 Gradle 3.2.1 作为构建工具。我们也在使用 org.sonarqube Gradle 插件。
感谢您的帮助。
安德烈
您的第一次尝试没有成功,因为您从命令行设置了系统属性,但稍后从项目属性设置它会将系统属性重置为配置值。
您的第二次尝试没有成功,因为 systemProp.sonar.login
语法仅在 gradle.properties 文件中受支持,而不是通过 -P
命令行项目属性。
你的第三次尝试没有成功,因为 SonarQube 扫描器更喜欢系统 属性 值而不是通过 DSL 配置的值,因此可以在本地配置的帮助下更改构建脚本中配置的内容.
您需要在构建脚本中手动设置系统属性,然后覆盖从项目 属性 自动设置的内容。使用项目 gradle.properties
文件不起作用,因为用户文件会覆盖项目文件。所以你需要在你的构建脚本中使用类似 System.properties.'sonar.login' = '...'
的东西。您可以在那里对其进行硬编码,或者使用您可以在 gradle.properties
文件中或通过 -P
参数设置的项目属性。
除此之外,我从不依赖构建服务器上 Gradle 用户目录中的任何配置。大多数构建服务器在分布式机器上使用可能 运行 的构建代理,因此您必须始终确保所有构建代理的配置相同等等。我总是在构建服务器的构建设置中配置相应的配置,方法是设置系统属性、环境属性或命令行参数。
只是我的 2ct.
在我们的 CI 环境中,我们目前有一个构建服务器(基于 Atlassian Bamboo)和两个 SonarQube 实例(版本 6.0 和 6.5)。最初,我们的 CI 服务器配置为与 6.0 SonarQube 实例通信。这已在我们的 CI 服务器上的 /home/bamboo/.gradle/gradle.properties
文件中配置如下:
systemProp.sonar.host.url=<http url of SonarQube 6.0 instance>
systemProp.sonar.login=<username here>
systemProp.sonar.password=<password here>
现在我们的 CI 服务器上有另一个基于 Gradle 的项目 运行,它将与新的 SonarQube 6.5 实例通信。我尝试配置它,但一直失败。
到目前为止我所做的事情:
向 gradle 包装器命令添加了命令行参数:
我尝试将 -Dsonar.host.url=
、-Dsonar.login=
、-Dsonar.password=
添加到 Gradle 命令。由于这似乎不起作用,我还尝试使用 -DsystemProp.sonar.host.url=
、-DsystemProp.sonar.login=
、-DsystemProp.sonar.password=
将命令行参数设置为 SonarQube 系统属性。这也没有用。
向 build.gradle 文件添加了属性
- 将属性添加到 build.gradle
文件,如下所示:
sonarqube {
properties {
property "sonar.host.url", "<http url of SonarQube 6.0 instance>"
property "sonar.login", "<username here>"
property "sonar.password", "<password here>"
...<other SonarQube analysis settings here>...
}
}
在所有情况下,CI 服务器与错误的 SonarQube 实例 (6.0) 通信。我的问题是,是否可以配置一个项目来与另一个 SonarQube 实例对话。如您所见,我们使用 Gradle 3.2.1 作为构建工具。我们也在使用 org.sonarqube Gradle 插件。
感谢您的帮助。
安德烈
您的第一次尝试没有成功,因为您从命令行设置了系统属性,但稍后从项目属性设置它会将系统属性重置为配置值。
您的第二次尝试没有成功,因为 systemProp.sonar.login
语法仅在 gradle.properties 文件中受支持,而不是通过 -P
命令行项目属性。
你的第三次尝试没有成功,因为 SonarQube 扫描器更喜欢系统 属性 值而不是通过 DSL 配置的值,因此可以在本地配置的帮助下更改构建脚本中配置的内容.
您需要在构建脚本中手动设置系统属性,然后覆盖从项目 属性 自动设置的内容。使用项目 gradle.properties
文件不起作用,因为用户文件会覆盖项目文件。所以你需要在你的构建脚本中使用类似 System.properties.'sonar.login' = '...'
的东西。您可以在那里对其进行硬编码,或者使用您可以在 gradle.properties
文件中或通过 -P
参数设置的项目属性。
除此之外,我从不依赖构建服务器上 Gradle 用户目录中的任何配置。大多数构建服务器在分布式机器上使用可能 运行 的构建代理,因此您必须始终确保所有构建代理的配置相同等等。我总是在构建服务器的构建设置中配置相应的配置,方法是设置系统属性、环境属性或命令行参数。
只是我的 2ct.