背景:在Sonar Qube中,存在一个名为abcd
的自定义质量门。这不是默认的质量门。在Jenkins中,我使用参数为一组API配置了这个SonarQube质量门
-Dsonar.QualityGate=abcd
它工作正常。
最近Sonar Qube升级到5.3版。从那时起,abcd
质量门不起作用,默认质量门正在发挥作用,而不是所有API的abcd
质量门。
经过分析,我发现版本5.3中已弃用sonar.QualityGate
。
问题:您能告诉我替代方案吗?我如何确保这些API具有abcd
作为质量门而不是默认质量门?
我更喜欢一个解决方案,以便我可以在Jenkins上配置一些内容,因为我可以访问Jenkins但不能访问Sonar Qube配置。
答案 0 :(得分:3)
在运行分析时,确实不可能使用参数设置项目的质量门。 只能从UI / WS中指定哪个质量门应该用于哪个项目。
有关详细信息,请参阅文档:sample reference。
答案 1 :(得分:2)
您仍然可以通过Sonarqube Web API动态创建关联门 - 项目。
在您的Sonarqube实例中,转到其 Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, url);
sendIntent.setType("text/plain");
context.startActivity(sendIntent);
网址(例如/web_api
)并查看可用操作列表。
http://my-sonarqube/web_api
是与质量门相关的一组操作。
web_api/api/qualitygates
是将门与项目关联所需的操作。
因此,作为已弃用的web_api/api/qualitygates/select
的替代,您可以使用通过Web UI进行的手动关联,或通过Web API进行动态(和自动)关联,建议使用。后一种情况是继续集成作业(正如您在此上下文中提到的Jenkins)的情况,需要动态创建链接(对分支管理尤其有用)。
作为此操作的必备步骤,您需要传递一些权限,例如用户令牌,来自official Sonarqube documentation on Web API的推荐方法。
在调用sonar.qualitygate
步骤之前,CI步骤的示例:
sonar:sonar
其中:
curl -u ${sonar.password.token}: ${sonar.setqualitygate.url} \
-d "gateId=${sonar.gate.id}&projectKey=${sonar.project.key}:${planRepository.branch}"
是您需要从Sonarqube用户管理页面生成的令牌,适用于技术用户(例如,用于在组件之间建立连接的Jenkins用户)sonar.password.token
REST API端点的网址(例如sonar.setqualitygate.url
)http://your.sonarqube.domain/api/qualitygates/select
是门槛ID,您可以在相关门的网址上轻松找到它(例如sonar.gate.id
)http://your.sonarqube.domain/quality_gates/show/<id>
和sonar.project.key
这里我们动态构建某个分支的项目名称,如果您不想动态处理分支,可以跳过此步骤(例如,易于做竹子,詹金斯有点棘手)答案 2 :(得分:0)
使用 A_Di-Matteo 建议的方法,我遇到了一个问题:当试图为全新功能分支选择一个门时,Sonar会抛出一个错误,说该项目不存在。因此,只有在创建项目后才能分配门。 在这种情况下,我使用hack:在分配门之前使用Sonar Web API手动创建项目,然后才执行mvn sonar:sonar step。 这是虚拟新项目的创建:
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}"
}