Sky's blog

我和我追逐的梦

常用链接

统计

其他链接

友情链接

最新评论

解决jenkins执行sonar时重复执行两次test的问题

    在jenkins上建立了一个job,通过标准的maven命令来执行打包测试和上传artifact到nexus仓库。mvn 命令为标准格式: clear deploy。

    随后考虑到需要执行sonar,第一个解决方案是在jenkins中新建一个名为***_sonar的job,执行命令sonar:sonar。在原有job上通过设置Post-build Action / Build other projects, 将***_sonar加入到 Projects to build,实现sonar job的在原有job执行后触发。当时需要勾选"Trigger only if build succeeds",避免构建失败的时候也触发sonar的执行。

    这个方案运行正常,但是随后发现有些性能问题:sonar的job执行时,需要重新update SCM,然后需要再次执行test,之后才能进行真正属于sonar的任务如代码检测等。明显update SCM 和执行test是重复了原有job,纯属浪费。这个重复执行问题随着测试案例和测试执行时间的增加,会越来越明显。因此需要考虑消除这里的重复问题,减少build的时间,并节约jenkins的资源。
    首先考虑两次scm update的问题,这个问题的来源在于有两个jenkins的job,因此考虑将***_job废弃,直接在原有job上执行sonar。将maven命令修改为以"clear deploy sonar:sonar"。

    这次理所当然的只update 一次scm,但是test 还是执行了两次。在install阶段执行第一次,在sonar:sonar阶段执行第二次。
    试着在jenkins中安装sonar的plugin,然后将maven命令修改为原来的"clear deploy",在Post-build Actions勾选sonar,通过jenkins的sonar插件来执行sonar。很遗憾,还是两次test。
    想了想问题还是在sonar这里,为什么不直接使用已经执行的test的结果?
    google了一下,发现sonar自己的文档中也提到了这个两次执行test的问题,但是,居然没有给出解决的方法。
http://docs.codehaus.org/display/SONAR/Analyse+with+Maven
    不过提到可以通过设置-Dmaven.test.failure.ignore=true 来要求sonar即使在test执行失败的情况下也要执行代码分析。
    随后google到sonar的jira记录,有一个bug解决这个问题
http://jira.codehaus.org/browse/SONAR-415
    jiar记录中明确提到,“for performance reasons. It avoids executing twice unit tests.”,呵呵,正和我意啊。
    解决的方法,就是通过设置 sonar.dynamicAnalysis = reuseReports,使得sonar放弃运行 test 而直接复用已有的report,从而避免了二次执行test。
    总结:最终的mvn 命令行
clean deploy sonar:sonar -Dsonar.dynamicAnalysis=reuseReports -Dmaven.test.failure.ignore=true

posted on 2012-02-14 14:53 sky ao 阅读(5640) 评论(5)  编辑  收藏 所属分类: project building

评论

# re: 解决jenkins执行sonar时重复执行两次test的问题 2012-02-14 15:12 sky ao

刚刚很郁闷的发现,按照上面的命令sonar虽然可以跑,但是出来的结果里面,少了很重要的一个内容:

Code coverage 那里没有内容!

难道非得跑两次test才行?  回复  更多评论   

# re: 解决jenkins执行sonar时重复执行两次test的问题 2012-06-04 17:45 god

跑2次有什么问题吗  回复  更多评论   

# re: 解决jenkins执行sonar时重复执行两次test的问题 2012-06-09 20:41 sky ao

@god

没有特别的坏处,只是测试时间就要*2了,有点浪费时间和资源。  回复  更多评论   

# re: 解决jenkins执行sonar时重复执行两次test的问题 2012-06-16 22:58 bigfei

这个可以通过jenkins的一个插件解决,google jenkins sonar test plugins.  回复  更多评论   

# re: 解决jenkins执行sonar时重复执行两次test的问题[未登录] 2012-09-14 16:37 hello

为什么不第一次构建的时候不执行呢
clean deploy -Dmaven.test.skip=true
sonar:sonar  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: