上下文:在Sonar中,有一个定制的质量门,叫做“abcd”。这不是默认的质量门。在Jenkins中,我使用参数SonarQube为一组API配置了这个-Dsonar.QualityGate=abcd质量门,它运行得很好。
最近,Sonar Qube升级到5.3版。从那时起,abcd质量门就不起作用了,所有API都使用默认的质量门,而不是abcd质量门。
通过分析,我了解到sonar.QualityGate在5.3版本中是不可取的。
问题:你能告诉我另一种选择吗?我如何确保这些API集具有abcd作为质量门,而不是默认的质量门?
我更喜欢这样的解决方案,因为我可以在Jenkins上配置一些东西,因为我可以访问Jenkins,但不能使用Sonar配置。
发布于 2016-04-01 07:40:04
在运行分析时,使用参数来设置项目的质量门是不可能的。只有在UI/WS中才有可能,在那里您可以指定哪个Quality应该用于哪个项目。
有关更多信息,请参见文档:http://docs.sonarqube.org/display/SONAR/Quality+Gates。
发布于 2017-06-06 09:32:32
您仍然可以通过Sonarqube动态创建关联门项目。
从Sonarqube实例中,转到它的/web_api URL (例如http://my-sonarqube/web_api)并检查可用操作的列表。
web_api/api/qualitygates是与质量门相关的一组操作。web_api/api/qualitygates/select是将一个门与项目关联起来所需的操作。
因此,作为废弃sonar.qualitygate的替代,您可以通过web使用手动关联,也可以通过web使用动态(和自动)关联。后一种情况是在连续集成作业(如您在此上下文中提到的Jenkins )情况下,需要动态创建链接(尤其对于分支管理有用)。
作为此操作工作的强制步骤,您需要按照关于Web的官方Sonarqube文档推荐的方法传递一些权限,例如用户令牌。
在调用sonar:sonar步骤之前,CI步骤可能是什么样子的示例:
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端点的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 --我们也在动态地为某个分支构建项目名称--如果您不想动态地处理分支,可以跳过这个步骤(例如,在竹类中很容易实现,在Jenkins中则比较复杂)发布于 2018-04-13 08:18:47
使用A_Di提出的方法,我面临一个问题:当试图为全新的特性分支选择一个门时,Sonar抛出一个错误,说项目不存在。因此,只有在创建了项目之后,才能分配一个门。在本例中,我使用hack:在分配门之前使用Sonar手动创建一个项目,然后执行mvn声纳:声纳步骤。下面是虚拟新项目的创建:
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}"
}https://stackoverflow.com/questions/36347106
复制相似问题