sonar.Qualitygate 在 Sonar Qube 5.3 中已弃用。有什么选择?
sonar.Qualitygate is Deprecated in Sonar Qube 5.3. What is the alternative?
上下文:在 Sonar Qube 中,存在一个名为 say abcd
的自定义质量门。这不是默认的质量门。在 Jenkins 中,我通过使用参数为一组 API 配置了这个 SonarQube Quality Gate
-Dsonar.QualityGate=abcd
并且运行良好。
最近Sonar Qube升级到5.3版本。从那时起,abcd
质量门不起作用,默认质量门开始发挥作用,而不是所有 API 的 abcd
质量门。
经过分析,我了解到 sonar.QualityGate
在 5.3 版本中已被弃用。
问题:你能告诉我有什么选择吗?我如何确保这些 API 集将 abcd
作为质量门而不是默认质量门?
我更喜欢这样的解决方案,这样我可以在 Jenkins 上配置一些东西,因为我可以访问 Jenkins 但不能访问 Sonar Qube 配置。
在运行分析时,确实无法使用参数设置项目的质量门。
只能从 UI/WS 开始,您可以在其中指定哪个 Quality Gate 应该用于哪个项目。
有关详细信息,请参阅文档:http://docs.sonarqube.org/display/SONAR/Quality+Gates。
您仍然可以动态创建关联门 - 通过 Sonarqube Web 项目 API。
从您的 Sonarqube 实例,转到其 /web_api
URL(例如 http://my-sonarqube/web_api
)并检查可用操作列表。
web_api/api/qualitygates
是与质量关卡相关的操作集。
web_api/api/qualitygates/select
是您需要将门关联到项目的操作。
因此,作为已弃用的 sonar.qualitygate
的替代品,您可以使用通过网络的手动关联 UI 或通过网络的动态(和自动)关联 API,推荐.后一种情况是持续集成作业(正如您在本文中提到的 Jenkins)需要动态创建 link(对分支机构管理特别有用)的方法。
作为此操作生效的必经步骤,您需要通过一些权限,例如用户令牌,作为 official Sonarqube documentation on Web API.
推荐的方法
CI 步骤在调用 sonar:sonar
步骤之前的示例:
curl -u ${sonar.password.token}: ${sonar.setqualitygate.url} \
-d "gateId=${sonar.gate.id}&projectKey=${sonar.project.key}:${planRepository.branch}"
其中:
sonar.password.token
是您需要从 Sonarqube 用户管理页面生成的令牌,用于技术用户(例如,用于在组件之间建立连接的 Jenkins 用户)
sonar.setqualitygate.url
REST API 端点的 URL(例如 http://your.sonarqube.domain/api/qualitygates/select
)
sonar.gate.id
是门的id,你可以在相关门的URL上很容易找到它(例如http://your.sonarqube.domain/quality_gates/show/<id>
)
sonar.project.key
和 planRepository.branch
在这里我们也为某个分支动态构建项目的名称,如果你不想动态处理分支(例如在 Bamboo 中很容易做到,在 Jenkins 中有点棘手)
使用 A_Di-Matteo 建议的方法,我遇到了一个问题:当尝试 select 全新功能分支的门时,声纳抛出一个错误说该项目不存在。因此只有在创建项目后才能分配门。
在这种情况下,我使用 hack:在分配门之前使用 Sonar Web API 手动创建项目,然后才执行 mvn sonar:sonar 步骤。
这是虚拟新项目的创建:
def createNewProject(def config, def branch) {
String projectName = new XmlSlurper().parseText(readFile('pom.xml')).name as String
def url = "${config.sonarHost}/api/projects/create"
sh "curl -u ${config.sonarToken}: ${url} -d 'name=${projectName}&project=${projectKey()}&branch=${branch}'"
}
下一步是为这个虚拟项目分配一个门:
def setSonarQualityGate(def config, def projectFullName, def gateId) {
def url = "${config.sonarHost}/api/qualitygates/select"
sh "curl -u ${config.sonarToken}: ${url} -d 'gateId=${gateId}&projectKey=${projectFullName}'"
}
然后我才自己执行分析:
def runSonarAnalysis(def config, def branch) {
echo "Run Sonar analysis"
sh "mvn sonar:sonar -Dsonar.host.url=${config.sonarHost} -Dsonar.branch=${branch}"
}
上下文:在 Sonar Qube 中,存在一个名为 say abcd
的自定义质量门。这不是默认的质量门。在 Jenkins 中,我通过使用参数为一组 API 配置了这个 SonarQube Quality Gate
-Dsonar.QualityGate=abcd
并且运行良好。
最近Sonar Qube升级到5.3版本。从那时起,abcd
质量门不起作用,默认质量门开始发挥作用,而不是所有 API 的 abcd
质量门。
经过分析,我了解到 sonar.QualityGate
在 5.3 版本中已被弃用。
问题:你能告诉我有什么选择吗?我如何确保这些 API 集将 abcd
作为质量门而不是默认质量门?
我更喜欢这样的解决方案,这样我可以在 Jenkins 上配置一些东西,因为我可以访问 Jenkins 但不能访问 Sonar Qube 配置。
在运行分析时,确实无法使用参数设置项目的质量门。 只能从 UI/WS 开始,您可以在其中指定哪个 Quality Gate 应该用于哪个项目。
有关详细信息,请参阅文档:http://docs.sonarqube.org/display/SONAR/Quality+Gates。
您仍然可以动态创建关联门 - 通过 Sonarqube Web 项目 API。
从您的 Sonarqube 实例,转到其 /web_api
URL(例如 http://my-sonarqube/web_api
)并检查可用操作列表。
web_api/api/qualitygates
是与质量关卡相关的操作集。
web_api/api/qualitygates/select
是您需要将门关联到项目的操作。
因此,作为已弃用的 sonar.qualitygate
的替代品,您可以使用通过网络的手动关联 UI 或通过网络的动态(和自动)关联 API,推荐.后一种情况是持续集成作业(正如您在本文中提到的 Jenkins)需要动态创建 link(对分支机构管理特别有用)的方法。
作为此操作生效的必经步骤,您需要通过一些权限,例如用户令牌,作为 official Sonarqube documentation on Web API.
推荐的方法CI 步骤在调用 sonar:sonar
步骤之前的示例:
curl -u ${sonar.password.token}: ${sonar.setqualitygate.url} \
-d "gateId=${sonar.gate.id}&projectKey=${sonar.project.key}:${planRepository.branch}"
其中:
sonar.password.token
是您需要从 Sonarqube 用户管理页面生成的令牌,用于技术用户(例如,用于在组件之间建立连接的 Jenkins 用户)sonar.setqualitygate.url
REST API 端点的 URL(例如http://your.sonarqube.domain/api/qualitygates/select
)sonar.gate.id
是门的id,你可以在相关门的URL上很容易找到它(例如http://your.sonarqube.domain/quality_gates/show/<id>
)sonar.project.key
和planRepository.branch
在这里我们也为某个分支动态构建项目的名称,如果你不想动态处理分支(例如在 Bamboo 中很容易做到,在 Jenkins 中有点棘手)
使用 A_Di-Matteo 建议的方法,我遇到了一个问题:当尝试 select 全新功能分支的门时,声纳抛出一个错误说该项目不存在。因此只有在创建项目后才能分配门。 在这种情况下,我使用 hack:在分配门之前使用 Sonar Web API 手动创建项目,然后才执行 mvn sonar:sonar 步骤。 这是虚拟新项目的创建:
def createNewProject(def config, def branch) {
String projectName = new XmlSlurper().parseText(readFile('pom.xml')).name as String
def url = "${config.sonarHost}/api/projects/create"
sh "curl -u ${config.sonarToken}: ${url} -d 'name=${projectName}&project=${projectKey()}&branch=${branch}'"
}
下一步是为这个虚拟项目分配一个门:
def setSonarQualityGate(def config, def projectFullName, def gateId) {
def url = "${config.sonarHost}/api/qualitygates/select"
sh "curl -u ${config.sonarToken}: ${url} -d 'gateId=${gateId}&projectKey=${projectFullName}'"
}
然后我才自己执行分析:
def runSonarAnalysis(def config, def branch) {
echo "Run Sonar analysis"
sh "mvn sonar:sonar -Dsonar.host.url=${config.sonarHost} -Dsonar.branch=${branch}"
}