SonarQube REST API实践

root
233
文章
0
评论
2021年10月18日12:44:28 评论 3541字阅读11分48秒

SonarQube REST API实践

SonarQube系统的API文档:http://192.168.1.110:9000/web_api
示例:
//查找项目
api/projects/search?projects=${projectName}"

//创建项目
api/projects/create?name=${projectName}&project=${projectName}"
   
//更新语言规则集
api/qualityprofiles/add_project?language=${language}&qualityProfile=${qualityProfile}&project=${projectName}"

//项目授权
api/permissions/apply_template?projectKey=${projectKey}&templateName=${templateName}"

//更新质量阈
api/qualitygates/select?projectKey=${projectKey}&gateId=${gateId}"

示例

SonarQube API的请求方法

curl --location \
--request GET \
'http://192.168.1.110:9000/api/projects/search?projects=day4-maven2-service' \
--header 'Authorization: Basic YWRtaW46YWRtaW4xMjM0'

enkins代码中不要存在敏感信息, 将base64格式的SonarQube 用户token YWRtaW46YWRtaW4xMjM0存储到Jenkins凭据中(Secret Text类型),后续使用withCredentials将值赋值给变量SONAR_TOKEN

 

1 查找项目

接口地址和参数: http://192.168.1.110:9000/api/projects/search?projects=day4-maven2-service

请求类型: GET

postman调试:

  • 如果调用不存在的项目

调用的项目存在就会显示信息

{
    "paging": {
        "pageIndex": 1,
        "pageSize": 100,
        "total": 1
    },
    "components": [
        {
            "key": "demo-maven",
            "name": "demo-maven",
            "qualifier": "TRK",
            "visibility": "public",
            "lastAnalysisDate": "2021-10-14T05:01:36+0000",
            "revision": "86bf44bfe3cf2c721c443278f63b09a9ce85caac"
        }
    ]
}

把这个转换为curl指令

curl --location --request GET 'http://192.168.1.110:9000/api/projects/search?projects=demo-maven' \
--header 'Authorization: Basic YWRtaW46YWRtaW4xMjM='

注意:

Basic的值要在jenkins中生成凭据,

sonarqubeAPI使用这个凭据

Jenkins Pipeline

// 查找项目
def ProjectSearch(projectName){
    apiUrl = "projects/search?projects=${projectName}"
    response = SonarRequest(apiUrl,"GET")

    if (response.paging.total == 0){
        println("Project not found!.....")
        return false
    } 
    return true
}

 

考虑到Api的URL都具有相同部分http://192.168.1.110:9000/api所以单独复制给变量sonarApi。每个接口返回的都是JSON类型的数据, 这里使用readJSON进行解析和处理。【所以有了下面的代码】

def SonarRequest(apiUrl,method){
    withCredentials([string(credentialsId: "16ed65f2-1b1e-4fbb-b976-a5fd60698d60", variable: 'SONAR_TOKEN')]) {
        sonarApi = "http://192.168.1.110:9000/api"
        apiUrl="projects/search?projects=${projectName}"
        response = sh  returnStdout: true,
                script: """
            curl --location \
                 --request ${method} \
                 "${sonarApi}/${apiUrl}" \
                 --header "Authorization: Basic ${SONAR_TOKEN}"
            """
        //JSON格式化
        try {
            response = readJSON text: """ ${response - "\n"} """
        } catch(e){
            response = readJSON text: """{"errors" : true}"""
        }
        return response

 

2.创建项目

接口地址和参数: http://192.168.1.110:9000/api/projects/create?name=day4-maven4-service&project=day4-maven4-service

请求类型:POST

postman调试:

成功后sonarqube上可以看到创建的项目

 

curl --location --request POST 'http://192.168.1.110:9000/api/projects/create?name=day5-test&project=day5-test' \
--header 'Authorization: Basic YWRtaW46YWRtaW4xMjM='

Jenkins Pipeline

// 创建项目
def CreateProject(projectName){
    apiUrl = "projects/create?name=${projectName}&project=${projectName}"
    response = SonarRequest(apiUrl,"POST")
    try{
        if (response.project.key == projectName ) {
            println("Project Create success!...")
            return true
        }
    }catch(e){
        println(response.errors)
        return false
    }
}

 

3.更新项目质量配置

接口地址和参数: http://192.168.1.110:9000/api/qualityprofiles/add_project?language=java&project=day4-maven5-service&qualityProfile=devop

请求类型:POST

postman调试:

curl --location --request POST 'http://192.168.1.110:9000/api/qualityprofiles/add_project?language=java&project=demo-sharedlibrary&qualityProfile=demo' \
--header 'Authorization: Basic YWRtaW46YWRtaW4xMjM='

Jenkins Pipeline

// 更新质量阈
def UpdateQualityProfiles(lang, projectName, profileName){
    apiUrl = "qualityprofiles/add_project?language=${lang}&project=${projectName}&qualityProfile=${profileName}"
    response = SonarRequest(apiUrl,"POST")
    
    if (response.errors != true){
        println("ERROR: UpdateQualityProfiles ${response.errors}...")
        return false
    } else {
        println("SUCCESS: UpdateQualityProfiles ${lang} > ${projectName} > ${profileName}" )
        return true
    }
}

 

 

继续阅读
weinxin
我的微信
这是我的微信扫一扫
  • 文本由 发表于 2021年10月18日12:44:28
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
SonarQube-jenkins集成 SonarQube

SonarQube-jenkins集成

SonarQube-jenkins集成 两种方式: 1. 使用命令行方式 2. 使用Jenkins扩展插件的方式。 1.4.1 命令行方式 流水线中添加代码扫描阶段, 然后在script标签中定义一段...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: