1 简介
在大规模使用SonarQube平台对代码进行扫描时可能会遇到以下几个问题
2 解决SonarQube平台数据问题
当我们在大规模使用SonarQube进行代码质量检查的时候,我们需要让开发人员每次都能看到当前特性分支的扫描分析数据,以尽快解决有问题的代码,提高代码的质量。开源版本会带来一些问题,因为不支持一个项目多分支的形式,所以我们按照特性分支的名称来生成相对应的扫描项目。(会产生很多Sonarqube项目)
例如: 服务名称是 demo-abcd-service
之前我们的做法是不区分分支,在扫描所有分支的时候都会指定同一个sonar项目。这就是导致SonarQube平台此项目数据不稳定的根本原因。
现在的做法是: 假如这个项目有F1,F2等特性分支,在每次对其中特性分支构建扫描时会配置sonar扫描参数(projectName)为 “当前的服务名称_特性分支名称”,这样相当于每个特性分支都对应一个扫描项目,数据就不会出现问题了。
虽然解决了数据不稳定的问题,但又间接的带来了一些问题。
总结一下如何解决问题呢?
总之,最简单的方式就是付费购买开发版、企业版。小型团队也可以使用生成多项目的方式管理。
3 解决SonarQube扫描规则问题
在搭建好SonarQube平台后,已经配置好了针对每种语言的"Sonar Way"质量配置。我们在大规模使用中,对扫描Java项目的规则做了一些定制,有一些新增的规则还有一部分弃用的规则,总之大部分还都是默认自带的java规则,配置好规则后并设置为默认的规则。其中有几十个团队在用默认的规则,后来个别团队因需求要使用新的JAVA项目质量。如何为新建的项目自动配置好对应的质量呢?
分析
应对
实施主要通过RESTAPI完成
JenkinsFile(ShareLibrary)参考如下:
- 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: true
- return 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,'')
- }
4 SonarQube项目授权问题
我们在前面解决了SonarQube扫描前的一些问题,现在开始解决授权问题。
Sonarqube的授权配置
亲测: 新生成的项目还需要再应用权限模板后才能使对应的项目组成员访问。
解决:在项目扫描后,调用接口对当前项目应用对应的权限模板。
请参考👆问题解决中的Jenkinsfile文件。
5 总结
今天我们解决了常用的几个问题,当然还有可能还会有很多问题待解决。总结一下我们解决问题的思路。
我们将Jenkins和SonarQube做了集成,通过API能够满足我们的需求。
我们也可以在Jenkins上面创建一个项目,比如用户Sonar项目授权等等。
在大数据场景中,交易越来越多依靠算法完成。互联网平台通过不断进阶的算法和算...
虚拟主机 域名 是什么?虚拟主机和域名是两个不同的产品,都是搭 建网站 的所需...
【51CTO.com快译】每个React应用都是由交互组件组成的。这些组件如何通信是UI体...
企业 云服务器 一年多少钱?这个主要是看企业网站的规模如何了,如果网站规模大...
佟鑫: 华为云云享专家,多年软件研发经验,5年敏捷实践经验,熟悉各种敏捷框架。参...
本文原文来自Dapr Blog,作者阿里云高级技术专家敖小剑。本文是我根据自己的理解...
随着全球疫情的持续,在行业信息化、企业上云的趋势下,如何从云端落地,选择什...
本文转载自微信公众号「UP技术控」,作者conan5566 。转载本文请联系UP技术控公...
执行Sysprep的作用 对于需要加入域且使用域帐号登录Windows操作系统的用户,在创...
注册网站的 域名 需要多少钱一年?注册网站的域名,不同域名后缀,注册价格不一...