1简介在使用SonarQube平台进行大规模扫码时,可能会遇到以下问题SonarQube平台数据问题(开源版本不支持不同分支)SonarQube扫描规则problems(配置默认规则后如何为新项目指定新规则?)SonarQube项目授权问题(如何为新生产项目配置权限?)2解决SonarQube平台数据问题当我们使用SonarQube进行代码质量检查时scale,我们需要开发者每次都能看到当前feature分支的扫描分析数据,尽快解决有问题的代码,提升代码质量。开源版本会带来一些问题,因为不支持一个项目多个分支的形式,所以我们根据特性分支的名称生成对应的扫描项目。(会生成很多Sonarqube工程)比如:之前服务名是demo-abcd-service,我们的做法是不区分分支,扫描所有分支时会指定同一个sonar工程。这是本项目在SonarQube平台上数据不稳定的根本原因。目前的做法是:如果这个项目有F1、F2等特性分支,那么每次构建和扫描特性分支时,都会将sonar扫描参数(projectName)配置为“当前服务名称_特性分支名称”,相当于每次如果每个功能分支都对应一个扫描项目,那么数据就不会有问题。虽然解决了数据不稳定的问题,但也间接带来了一些问题。每个特性分支生成一个项目。如果删除了功能分支怎么办?还是分店多?SonarQube管理员难以管理,增加任务负担。总结如何解决问题?从长远来看,最直接的方式当然是购买开发版。现在SonarQube多分支插件,可以亲测使用。改变代码扫描方式,比如将每个特性分支扫描的数据与提交的commit信息相关联。总之,最简单的方式就是付费购买开发版和企业版。也可以通过生成多项目来管理小型团队。3解决SonarQube扫描规则问题在搭建SonarQube平台后,各个语言的“SonarWay”质量配置已经配置完毕。在大规模使用中,我们对扫描Java项目的规则做了一些定制。有一些新规则和一些已弃用的规则。总之,大部分都是默认的java规则。配置规则并设置为默认规则后。其中有几十个团队使用的是默认规则,后来个别团队因需要需要使用新的JAVA工程质量。如何为新建的项目自动配置相应的质量?分析SonarQube平台中的项目不需要单独新建,而是通过Jenkins构建过程生成。当我们需要为项目指定新的质量配置时,通常是在SonarWebUi中进行配置。每次通过“-Dsonar.xxxx”分支时,无法指定要使用的质量名称。响应由于SonarQube项目都是在扫描流水线后生成的,因此将步骤添加到流水线中。每次扫描前先判断物品是否存在,然后指定新的质量,再进行扫码。实现主要是通过RESTAPI创建项目:api/projects/create更新质量:api/qualityprofiles/add_project搜索项目:api/projects/searchJenkinsFile(ShareLibrary)参考如下:packagecom.devops//HttprequsingJenkinsplug-在包haha??hadefHttpReq(reqType,reqUrl,reqBody){result=httpRequestauthentication:'MyCredentialID',httpMode:reqType,contentType:"APPLICATION_JSON",consoleLogResponseBody:true,ignoreSslErrors:true,requestBody:reqBody,//responseHandle:'NONE',url:reqUrl//quiet:truereturnresult}//找到项目defSearchProject(projectName){apiUrl="http://mysonarserveraddress/api/projects/search?projects=${projectName}"resultInfo=HttpReq("GET",apiUrl,'')defresult=readJSONtext:"""${resultInfo.content}"""if(result["paging"]["total"]==0){return"false"}else{returnresult}}//创建项目defCreateProject(projectName){apiUrl="http://mysonarserveraddress/api/projects/create?name=${projectName}&project=${projectName}"resultInfo=HttpReq(“邮政",apiUrl,'')}//更新语言规则集defUpdateQuality(language,qualityProfile,projectName){apiUrl="http://mysonarserveraddress/api/qualityprofiles/add_project?language=${language}&qualityProfile=${qualityProfile}&project=${projectName}"resultInfo=HttpReq("POST",apiUrl,'')}//项目授权defApplyTemplate(projectKey,templateName){apiUrl="http://我的sonar服务器地址/api/permissions/apply_template?projectKey=${projectName}&templateName=${templateName}"resultInfo=HttpReq("POST",apiUrl,'')}4SonarQube项目授权问题我们在SonarQube扫描之前解决了一些问题,现在开始解决授权问题Sonarqube授权配置用户先登陆SonarQube平台(我们已经做了GitlabSSO/LDAP集成)根据不同的业务组创建一个组然后将用户添加到对应的组根据业务的缩写创建相应的权限模板添加组和管理员e权限模板,然后将该权限模板批量应用到该业务的项目中。亲测:新生成的项目需要重新申请权限模板,才能被对应的项目组成员访问。解决方法:项目扫描完成后,调用接口为当前项目应用对应的权限模板。项目授权(申请权限模板):api/permissions/apply_template请参考👆中的Jenkinsfile解决问题。5总结今天我们解决了几个常用的问题,当然可能还有很多问题需要解决。总结一下我们解决问题的思路。我们通过API集成了Jenkins和SonarQube来满足我们的需求。我们也可以在Jenkins上创建一个项目,比如用户Sonar项目授权等等。
