SonarQube REST 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 } }

评论