请教关于开源中国使用sonar的一些想法和问题

Crazy_Coder 发布于 2014/10/14 16:14
阅读 1K+
收藏 1

最近在帮公司搭建一套代码质量管理的系统,@红薯 ,请问一下,关于开源中国使用sonar的一些问题:

1.开源中国将gitlab和sonar集成,是必须要每次手动的才去分析代码质量?

2.sonar能否支持在服务器上建一个目录,或者和gitlab关联起来,定时的去执行一个任务去分析代码?


目前只要问题是,对sonar和gitlab集成没有任何头绪和想法。

加载中
1
鱼说还休
鱼说还休
回复 @Crazy_Coder  @红薯
哈哈, 不好意思。真是杯具, 估计本月动弹又要垫底了,请客的桀纣。

oschina的sonar服务实现如下:
首先在sonar数据库新增了2个表,第一个是sonar配置,第二个是git项目信息,主要字段为git url、项目名、项目大小、关键字、项目分析结果、分析状态、分析失败次数等等。 
点击分析之后, git就会发一条http请求到sonar服务器并保存一条记录到那个新建的表。
然后sonar-runner根据这条记录执行2个crontab定时任务:
A.首先指定一个git项目目录,查询sonar数据库批量获取项目git地址,  根据git url获取git项目直到io结束,保存项目大小到git项目表。 和B任务分解的目的是减轻B任务的io压力(拉取所有git项目,这一步本来是可以避免的,直接读取我们的git中央库更好,可惜当时我们机房和数据正在迁移,存在一些问题)
B.查询git项目信息表批量获取分析状态和失败次数,项目的sonar配置信息,根据失败次数、文件大小、确定优先执行顺序;如果决定执行sonar分析,传递git项目文件目录和保持在数据库的git项目信息到sonar配置,再调用sonar配置读取接口,启动sonar-runner流程。成功分析后,保存执行状态和失败次数到git项目表。


主要难点:
Sonar-runner的执行压力是很大的,不论是内存消耗、cpu时间、数据库读写都相当频繁。
首先,项目大小和批量数量不能过多,我们服务器用60G内存应对,项目每个批量都只选择30个。分析的内存占用都很恐怖,每次执行完这30个项目之后,退出java虚拟机,等待下一次crontab执行。
其次,sonar-runner优先选择功能也很重要,可以考虑为git信息记录按照项目大小和分析失败次数的权重和建立优先队列,保证尽可能少的被大项目阻塞分析进度。
最后,如果有能力优化sonar分析流程,在每个项目被执行之后主动释放大量java内存,那将是一个巨大的优化。不过我们暂时没有那么迫切的需求,而且个人认为这一点sonar自己做最合适。何况水平和精力以及薪资都有限。ps:大家都是讨口饭吃的,扣工资的事手下留情~
搞这东西过去几个月了,梳理了1个小时才写清楚,希望能让您明白。
Crazy_Coder
Crazy_Coder
谢谢,回答的真详细。我现在是想将分析的动作集成在maven中,然后放在jenkins里做,我们持续集成每天做3次,每天还有若干次手动操作。这样我就害怕服务器能不能扛得住,还得考虑一下。PS:@红薯 千万别扣工资。哈哈
0
红薯
红薯
我们不想定时执行,希望大家手工处理。否则对我们系统的压力非常大
Crazy_Coder
Crazy_Coder
回复 @红薯 : 要扣工资
Crazy_Coder
Crazy_Coder
回复 @红薯 : 红薯,刚看了一下@鱼说还休 这货,上次登录还是2天前
红薯
红薯
@Crazy_Coder @鱼说还休 你来解答一下?
Crazy_Coder
Crazy_Coder
回复 @红薯 : 你又在使唤你手下了
Crazy_Coder
Crazy_Coder
其实内部在用,还是可以定时去执行的。请问下,开源中国,当我们去手动点击分析后,后台主要进行了什么操作?在sonar-runner之前?
0
lgscofield
lgscofield
这个有点象CI和SVN的机制,可以设置一个定时执行的时间,比如我们以前的做法是凌晨3点定时执行,LZ可以使用hudson集成sonar,这样就可以设置定时分析了,相关资料可以google/baidu
Crazy_Coder
Crazy_Coder
我们用的是jenkins,研究下
0
ruyuhi
ruyuhi
用jenkins与sonar是可以集成的,而且jenkins中只要下载sonar插件就行了,然后配置一个服务器中的sonar地址和用户信息
返回顶部
顶部