sonarQube的Api调用总结

       最近公司开发涉及到对Sonar获取数据和创建用户等操作,Sonar为我们提供了web Api,同时,在sonar5.x版本之前还贴心的为我们提供了sonar-ws-client,但是由于之后版本迭代比较快,接口差异大,sonar-ws-client在较新的版本中已不在适用。

        有人说官网上不是提供了Api么,是的,我们需要自己再封装一下,本帖为扫盲贴,大神请绕道,首先在适用api之前,我们需要知道

1:我们需要做安全校验

sonarQube的Api调用总结_第1张图片

sonar默认采用 Basic Auth 验证,需要在请求头中带上校验信息

2:我们需要注意传参格式

sonarQube的Api调用总结_第2张图片

sonar传参不能讲参数放在我们之前习惯的head或者body,需要我们将参数拼接在url中,不管是get还是post

下面我们看看具体实现:

this.encoding = DatatypeConverter.printBase64Binary((username+":"+password).getBytes("UTF-8"));

httpPost.setHeader("Authorization", "Basic " + this.encoding);

如此将校验信息头加上


传参格式如图所示,如此所有接口都能轻松掉通

另外由于sonar在国内信息都不多,我这里再啰嗦几句

sonar有自己的回调接口,每次完成代码检查后会调用此接口,我们只需要在sonar上配置回调地址,默认可配置10个,每个接口都能收到sonar的回调

sonarQube的Api调用总结_第3张图片

同时注意sonar的回调入参是一个json字符串对象,我们需要以此对象去接收,只需将此格式转为对象,spring的话用如下方式接收即可

@RequestBody SonarCallBackDto sonarCallBackDto

{
     "analysedAt" "2016-11-18T10:46:28+0100" ,
     "project" : {
         "key" "org.sonarqube:example" ,
         "name" "Example"
     },
     "properties" : {
     },
     "qualityGate" : {
         "conditions" : [
             {
                 "errorThreshold" "1" ,
                 "metric" "new_security_rating" ,
                 "onLeakPeriod" true ,
                 "operator" "GREATER_THAN" ,
                 "status" "OK" ,
                 "value" "1"
             },
             {
                 "errorThreshold" "1" ,
                 "metric" "new_reliability_rating" ,
                 "onLeakPeriod" true ,
                 "operator" "GREATER_THAN" ,
                 "status" "OK" ,
                 "value" "1"
             },
             {
                 "errorThreshold" "1" ,
                 "metric" "new_maintainability_rating" ,
                 "onLeakPeriod" true ,
                 "operator" "GREATER_THAN" ,
                 "status" "OK" ,
                 "value" "1"
             },
             {
                 "errorThreshold" "80" ,
                 "metric" "new_coverage" ,
                 "onLeakPeriod" true ,
                 "operator" "LESS_THAN" ,
                 "status" "NO_VALUE"
             }
         ],
         "name" "SonarQube way" ,
         "status" "OK"
     },
     "serverUrl" "http://localhost:9000" ,
     "status" "SUCCESS" ,
     "taskId" "AVh21JS2JepAEhwQ-b3u"
}

都是些简单的道理,由于官方文档不够详细,所以都琢磨了一会,希望对大家有所帮助


你可能感兴趣的:(web,api,devops)