关于SonarQube社区版使用问题及解决方法
简介
在大规模使用平台对代码进行扫描时可能会遇到以下几个问题
解决平台数据问题
当我们在大规模使用进行代码质量检查的时候,我们需要让开发人员每次都能看到当前特性分支的扫描分析数据,以尽快解决有问题的代码,提高代码的质量。开源版本会带来一些问题,因为不支持一个项目多分支的形式,所以我们按照特性分支的名称来生成相对应的扫描项目。(会产生很多项目)
例如: 服务名称是demo-abcd-
之前我们的做法是不区分分支,在扫描所有分支的时候都会指定同一个sonar项目。这就是导致平台此项目数据不稳定的根本原因。
现在的做法是:假如这个项目有F1,F2等特性分支,在每次对其中特性分支构建扫描时会配置sonar扫描参数()为“当前的服务名称_特性分支名称”,这样相当于每个特性分支都对应一个扫描项目,数据就不会出现问题了。
虽然解决了数据不稳定的问题,但又间接的带来了一些问题。
总结一下如何解决问题呢?
总之,最简单的方式就是付费购买开发版、企业版。小型团队也可以使用生成多项目的方式管理。
解决扫描规则问题
在搭建好平台后,已经配置好了针对每种语言的"Sonar Way"质量配置。我们在大规模使用中,对扫描Java项目的规则做了一些定制,有一些新增的规则还有一部分弃用的规则,总之大部分还都是默认自带的java规则,配置好规则后并设置为默认的规则。其中有几十个团队在用默认的规则,后来个别团队因需求要使用新的JAVA项目质量。如何为新建的项目自动配置好对应的质量呢?
分析
应对
实施主要通过完成
()参考如下:
package com.devops//Http req 使用Jenkins插件封装的方法 哈哈哈
def HttpReq(reqType,reqUrl,reqBody){result = httpRequest authentication: '我的凭据的ID',httpMode: reqType, contentType: "APPLICATION_JSON",consoleLogResponseBody: true,ignoreSslErrors: true, requestBody: reqBody,//responseHandle: 'NONE', url: reqUrl//quiet: truereturn result
}//查找项目
def SearchProject(projectName){apiUrl = "http://我的sonar服务器地址/api/projects/search?projects=${projectName}"resultInfo = HttpReq("GET",apiUrl,'')def result = readJSON text: """${resultInfo.content}"""if (result["paging"]["total"] == 0 ){return "false"} else {return result}
}//创建项目
def CreateProject(projectName){apiUrl = "http://我的sonar服务器地址/api/projects/create?name=${projectName}&project=${projectName}"resultInfo = HttpReq("POST",apiUrl,'')
}//更新语言规则集
def UpdateQuality(language,qualityProfile,projectName){apiUrl = "http://我的sonar服务器地址/api/qualityprofiles/add_project?language=${language}&qualityProfile=${qualityProfile}&project=${projectName}"resultInfo = HttpReq("POST",apiUrl,'')
}//项目授权
def ApplyTemplate(projectKey,templateName){apiUrl = "http://我的sonar服务器地址/api/permissions/apply_template?projectKey=${projectName}&templateName=${templateName}"resultInfo = HttpReq("POST",apiUrl,'')
}
项目授权问题
我们在前面解决了扫描前的一些问题,现在开始解决授权问题。
的授权配置
亲测:新生成的项目还需要再应用权限模板后才能使对应的项目组成员访问。
解决:在项目扫描后,调用接口对当前项目应用对应的权限模板。
请参考????问题解决中的文件。
总结
今天我们解决了常用的几个问题,当然还有可能还会有很多问题待解决。总结一下我们解决问题的思路。