准备工作
整套环境需要如下几个东东:
1.一台服务器,对配置什么的没太大要求,能用就行。。(在cloud.sankuai.com申请就行了,我申请的是一个ubuntu的测试机)
2.Mysql。(我自己在测试机上部署了一个)
3.Jenkins
4.Maven (3.1)
5.SonarQube (我用的是4.0版本的,官网可下http://www.sonarqube.org)
6.Jdk (1.6以上吧)
Sonar的安装
1.先申请服务器,我申请的是ubuntu的机器,系统无所谓,ubuntu可能会好装一点。192.168.12.114,申请好之后,重设密码,就可以ssh登录了。
2.检查一下jdk,果然啥都没有。。先安装一个jdk吧,可以到oracle的网站上去下jdk-6u45-linux-x64.bin。我用的是1.6。具体安装过程省略了。记得配置JAVA_HOME,PATH,CLASSPATH的环境变量。
3.安装maven,安装过程省略。同样别忘了配置环境变量。
4.下载到SonarQube的安装包后,scp到服务器上,用unzip解压。然后到bin目录下找到相应的系统路径,比如我用的64位ubuntu就选的是linux-x86-64目录,执行sh sonar.sh start,就启动了。sonar内嵌了jetty,所以默认可以通过如下访问:http://192.168.12.114:9000,如果你看到如下类似的界面,说明你已经在安装sonar的路上成功了30%。
5.Sonar里刚装上是没有数据的,所以就需要有个数据库来存储数据的。。。刚刚之所以能够启动,是因为sonar本身有个自带的H2数据库,官方建议实际中还是要自己装一个数据库,sonar支持oracle、postgresql、mysql,所以问题来了,我们需要装一个mysql。。。
MySql的安装与设置
1.ubuntu下安装mysql非常easy,直接 sudo apt-get install mysql-server 就可以了,没有比这更简单的了
2.安装完之后,可以用netstat看一下端口是否正常启动,默认是3306。之后你就可以通过service mysql start/stop/restart操作了。
3.如果要让sonar能用的话,需要创建创建一个sonar用户,以及一个sonar数据库,具体的方法如下:
#mysql -u root -p
mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
mysql> FLUSH PRIVILEGES;
4.最后一步,记得到/etc/mysql/my.cnf文件中,找到bind-address,将127.0.0.1改成0.0.0.0或者注释掉,否则将无法远程mysql数据库。
Sonar启动配置
1.在配置完mysql之后,我们需要配置一下sonar了,这里主要指配置sonar的访问地址,以及使用的数据库。在sonar的安装目录,找到conf目录,里面的文件
sonar.properties就是我们要找的了。
2.使用vim打开此文件,里面每一行都会有比较详细的说明,所以一般都能看懂,这里挑最主要的几项进行说明。
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true
由于我的sonar和mysql是在同一个服务器上,所以url配置的是localhost,如果用得远程的mysql,可以改成相应的ip。
其它的配置采用默认的就可以了,例如web端口为9000。
3.配置完成后,再次重启sonar,还是到bin目录下执行 sh sonar.sh restart,通过日志(在logs目录下),可以看到sonar自动连接到mysql数据库,并建了一堆表,如下:
Database changed
mysql> show tables
-> ;
+---------------------------+
| Tables_in_sonar |
+---------------------------+
| action_plans |
| active_dashboards |
| active_rule_changes |
| active_rule_notes |
| active_rule_param_changes |
| active_rule_parameters |
| active_rules |
| alerts |
| authors |
| characteristic_edges |
| characteristic_properties |
| characteristics |
| dashboards |
| dependencies |
| duplications_index |
| events |
| graphs |
| group_roles |
| groups |
| groups_users |
| issue_changes |
| issue_filter_favourites |
| issue_filters |
| issues |
| loaded_templates |
| manual_measures |
| measure_data |
| measure_filter_favourites |
| measure_filters |
| metrics |
| notifications |
| perm_templates_groups |
| perm_templates_users |
| permission_templates |
| project_links |
| project_measures |
| projects |
| properties |
| quality_models |
| resource_index |
| rule_notes |
| rules |
| rules_parameters |
| rules_profiles |
| schema_migrations |
| semaphores |
| snapshot_data |
| snapshot_sources |
| snapshots |
| user_roles |
| users |
| widget_properties |
| widgets |
+---------------------------+
53 rows in set (0.00 sec)
MAVEN执行sonar扫描
1.理论上,在配置完以上步骤后,我们就可以使用maven进行代码扫描了,首先使用git下载最新的代码,例如test。
2.还要配置一下maven,打开settings.xml文件,增加如下内容(主要是配置mysql):
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.jdbc.url> jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true</sonar.jdbc.url>
<sonar.jdbc.driverClassName>com.mysql.jdbc.Driver</sonar.jdbc.driverClassName>
<sonar.jdbc.username>sonar</sonar.jdbc.username>
<sonar.jdbc.password>sonar</sonar.jdbc.password>
<sonar.host.url>http://192.168.12.114:9000</sonar.host.url>
</properties>
</profile>
3.之后cd到test中根目录,就是有pom文件的那个,执行mvn sonar:sonar。就可以完成sonar的扫描了,它会自动把结果扫描保存到mysql,执行完成之后,登陆sonar的页面http://192.168.12.114:9000,如下:
红框里的东西就是我们刚生成的报告,点击进去自己看吧。
Jenkins与sonar的集成
1.上面maven生成sonar报告的方式,还是比较原始的。。如果你想更进一步的话,还可以跟Jenkins进行集成,这样定制一个job每天跑一次,就可以每天得到最新的sonar报告了。下面讲Jenkins的配置过程,需要的账号的权限比较高。
2.首先你要获得Jenkins的系统配置的权限,这个是在关飞的帮助下拿到的。打开Jenkins-》系统管理-》管理插件,先安装sonar的插件吧,具体的安装过程比较简单,不再详述。
3.安装完插件之后,要到Jenkins-》系统管理-》系统配置,配置sonar的一些参数。如下图:
4.之后就可以定制一个job了,这里我们选取hotel-server的代码,在“构建后操作”中勾选sonar,就可以了。
5.然后就是触发一次构建了,具体的过程就跟maven触发sonar的过程一样了,触发完成后,在jenkins的界面中可以看到sonar的链接。
6.点击sonar的图标,就能自动连接到sonar平台了,如下:
从上面可以看到许多信息,包含代码行数,代码的问题数,单元测试覆盖率,重复行数等信息。
结语
sonar的功能非常强大,有兴趣的可以仔细研究一下,里面可以定制各种代码检查规则,是一个非常棒的代码质量管理平台。