关于SonarQube社区版使用问题及解决方法
您当前使用的 SonarQube是开源版本吗?
点击上方蓝色字体,关注我们
1
简介
在大规模使用SonarQube平台对代码进行扫描时可能会遇到以下几个问题
SonarQube平台数据问题(开源版本不支持不同分支)
SonarQube扫描规则问题(当配置了默认规则后新建项目如何指定新规则呢?)
SonarQube项目授权问题(新生产的项目如何配置权限?)
2
解决SonarQube平台数据问题
当我们在大规模使用SonarQube进行代码质量检查的时候,我们需要让开发人员每次都能看到当前特性分支的扫描分析数据,以尽快解决有问题的代码,提高代码的质量。开源版本会带来一些问题,因为不支持一个项目多分支的形式,所以我们按照特性分支的名称来生成相对应的扫描项目。(会产生很多Sonarqube项目)
例如: 服务名称是 demo-abcd-service
之前我们的做法是不区分分支,在扫描所有分支的时候都会指定同一个sonar项目。这就是导致SonarQube平台此项目数据不稳定的根本原因。
现在的做法是: 假如这个项目有F1,F2等特性分支,在每次对其中特性分支构建扫描时会配置sonar扫描参数(projectName)为 “当前的服务名称_特性分支名称”,这样相当于每个特性分支都对应一个扫描项目,数据就不会出现问题了。
虽然解决了数据不稳定的问题,但又间接的带来了一些问题。
每个特性分支生成一个项目,假如特性分支被删除呢?或者分支很多呢?
对于SonarQube管理员来说很难管理,增加了任务负担。
总结一下如何解决问题呢?
从长远角度来说最直接的方式当然是购买开发版本 。
变更代码扫描的模式,比如将每次特性分支扫描的数据关联到提交的commit信息中。
总之,最简单的方式就是付费购买开发版、企业版。小型团队也可以使用生成多项目的方式管理。
3
解决SonarQube扫描规则问题
在搭建好SonarQube平台后,已经配置好了针对每种语言的"Sonar Way"质量配置。我们在大规模使用中,对扫描Java项目的规则做了一些定制,有一些新增的规则还有一部分弃用的规则,总之大部分还都是默认自带的java规则,配置好规则后并设置为默认的规则。其中有几十个团队在用默认的规则,后来个别团队因需求要使用新的JAVA项目质量。如何为新建的项目自动配置好对应的质量呢?
分析
SonarQube平台中的项目不需要单独的新建,而是通过Jenkins构建过程中生成。
当我们需要为项目指定新的质量配置的时候,通常在Sonar WebUi中进行配置。
无法通过"-Dsonar.xxxx"方式指定每次分支时使用的质量名称。
应对
由于SonarQube项目都是通过流水线扫描后生成的,于是在流水线中增加步骤。
每次扫描之前先判断项目是否存在,然后指定新的质量,再执行代码扫描。
实施主要通过RESTAPI完成
创建项目:api/projects/create
更新质量:api/qualityprofiles/add_project
查找项目:api/projects/search
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: 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,'')
}
4
SonarQube项目授权问题
我们在前面解决了SonarQube扫描前的一些问题,现在开始解决授权问题。
Sonarqube的授权配置
用户首先登陆SonarQube平台(我们做了GitlabSSO/LDAP集成)
根据不同的业务组对应创建一个group
然后将用户加入到对应的group中
根据业务的简称创建对应的权限模板
将组和管理员加入权限模板中
然后将该业务的项目批量应用权限模板
亲测: 新生成的项目还需要再应用权限模板后才能使对应的项目组成员访问。
解决:在项目扫描后,调用接口对当前项目应用对应的权限模板。
项目授权(应用权限模板):api/permissions/apply_template
请参考????问题解决中的Jenkinsfile文件。
5
总结
今天我们解决了常用的几个问题,当然还有可能还会有很多问题待解决。总结一下我们解决问题的思路。
我们将Jenkins和SonarQube做了集成,通过API能够满足我们的需求。
我们也可以在Jenkins上面创建一个项目,比如用户Sonar项目授权等等。
关于SonarQube社区版使用问题及解决方法相关推荐
- VS2017社区版Community 许可证过期解决方法
之前过期可以登录自己的github账号再认证一下就OK了,但是这次就是登录不上会有脚本错误的弹窗,搜到一个方法亲测有效,也非常简单,找一个同等开发环境,把对应路径下的许可证文件夹拷贝放到自己的文件夹下 ...
- 静态代码扫描工具(多种)简要入门介绍-SonarQube社区版-免费、TscanCode工具、PMD工具、flake8工具
SonarQube社区版-免费 适用语言:Java, C#, JavaScript, TypeScript, CloudFormation, Terraform, Kotlin, Ruby, Go, ...
- csgo服务器找不到,csgo社区服务器进不去解决方法
近期有玩家在玩csgo的时候遇到了一些小问题,他们在询问:csgo社区服务器进不去怎么办?今天小编就带来csgo社区服务器进不去解决方法,希望对大家能有所帮助. csgo社区服务器进不去解决方法 好几 ...
- 电脑网易我的世界进服务器未响应,我的世界网易版进不去解决方法 MC网易电脑端进不去原因...
虽然网易版的国服我的世界是免费的,但是还是有些问题值得吐槽,就是会出现游戏登录不上去,本期为大家带来的就是我的世界网易版进不去解决方法及MC网易电脑端进不去原因! 我的世界网易版进不去解决方法 MC网 ...
- 饥荒联机版连不上服务器_《饥荒》联机版无法连接服务器怎么办 联机版无法连接服务器解决方法...
第1页: 展开 <饥荒>联机版的很多朋友多少都出现了无法连接服务器,今天就为大家带来了饥荒联机版无法连接服务器解决方法,教给大家怎么解决这个问题,非常实用,快跟我一起来学习下吧. 其实有时 ...
- ubuntu下QQ国际版无法输入汉字解决方法
ubuntu下qq国际版无法输入汉字解决方法: 首先编辑wine-qqintl运行脚本: sudo vim /usr/bin/wine-qqintl 然后在 export LANG=zh_CN.utf ...
- 群星服务器id不显示,《群星stellaris》1.21版常见三大bug解决方法一览
<群星stellaris>1.21版常见三大bug解决方法一览 2016-07-31 11:05:00来源:贴吧编辑:评论(0) <群星stellaris>1.21版中玩家遇到 ...
- csgo路由器服务器无响应怎么办,csgo社区服务器进不去解决方法
近期有玩家在玩csgo的时候遇到了一些小问题,他们在询问:csgo社区服务器进不去怎么办?今天小编就带来csgo社区服务器进不去解决方法,希望对大家能有所帮助. csgo社区服务器进不去解决方法 好几 ...
- 我的世界服务器为什么一直显示游戏运行中,我的世界网易版进不去解决方法 MC网易电脑端进不去原因...
虽然网易版的国服我的世界是免费的,但是还是有些问题值得吐槽,就是会出现游戏登录不上去,本期为大家带来的就是我的世界网易版进不去解决方法及MC网易电脑端进不去原因! 我的世界网易版进不去解决方法 MC网 ...
最新文章
- java编译器 Javac 编译原理
- hdu 4763 Theme Section(next数组找串中三段相等)
- 二叉树和为某种所有路径
- x264 n-th pass编码时候Stats文件的含义
- Angular依赖注入机制的一个错误消息:Error Cannot instantiate cyclic dependency!
- Tidal Finance在Uniswap开启流动性挖矿
- Python实战入门到精通第一讲——函数
- Linux实战问题解决方案(1):Could not get lock
- 不小心合并了icloud通讯录_苹果手机号码被删除如何恢复?找回通讯录的具体步骤...
- 深度学习2.0-34.ResNet 与 DenseNet
- Elasticsearch Join类型查询父子关系
- html5黑色主题登录网页,永恒经典 18个黑白灰配色的网页设计作品
- Nginx Passenger 性能调优
- day04-Testin云测平台操作
- PS按照图片大小调整画布大小
- vista磁盘使用100%_在Vista上运行的免费ISO磁盘映像刻录实用程序
- DGA数据集和算法研究
- 1652:牡牛和牝牛
- acad2010求帮助
- 能源管理系统的主要功能|瑜岿科技|能源监测