将test与代码检查工具插件分成不同的job来处理, test job用来对每次修改进行测试, 代码检查job则在每次发布前手工启动
在我们的持续集成环境中, hudson 1.341 + jboss 4.2 这个版本组合比较稳定, hudson 版本太高会出现 dom4j相关的异常, 搞了好久没解决:(
比较常用的插件是findbugs, cobertura组合, 其他没用过, 前者用来检查代码中的一些低级错误, 后者用来统计代码覆盖率, 覆盖率工具还有clover, emma, 前者收费商用, 生成的report更炫, 更强(里面继承了代码复杂度, 代码风险评估等静态分析功能), 后者emma的report相对要简易
在使用cobertura之后, 如果是maven, goals and options不需要写test, 否则会出现test phase 跑两遍, 在跑cobertura之前默认会跑test. 比如这样设置:-U clean cobertura:cobertura
在hudson 1.341这个版本, cobertura maven plugin版本采用2.2就好, 太高(比如2.3)在生成report的时候会有一堆的语法检查warning, 虽然无大碍.
在使用cobertura的时候有一个限制, 就是如果test跟要测试的project是分离的, 换句话说如果test是一个单独的project, 那么这个貌似是没法对被测试的project统计代码覆盖率, 而clover则没有这个限制, 要钱的就是不一样啊!
关于cobertura的maven plugin配置, 本人认为hudson上的配置太繁琐, 其实可以简单的配置为:
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>cobertura-maven-plugin</artifactId>
- <version>2.2</version>
- <configuration>
- <formats>
- <format>xml</format>
- </formats>
- </configuration>
- </plugin>
对clover的maven命令也有一些技巧, 一般要这样配置:
-U clean clover2:setup test clover2:aggregate clover2:clover
如果将test放在clover2:setup前面, 则clover的一些设置将会被test被清掉, 导致有些report可能没法输出
所以最终我们的选择hudson 1.341 + jboss 4.2 +clover plugin + findbugs plugin