前言

之前搭建了jenkins自动构建,想了想干脆devOps的一套全搭起来玩玩算了,今天要干的就是集成一下代码质量管控的神器Sonar。

Sonar可以检查代码是否有BUG,你的代码注释率是多少,代码有一些建议,编写语法的建议,很方便PM来控制代码质量。

他还可以跟Jenkins集成,在自动构建的时候自动检测,发送邮件给PM。

总之,这么好的工具,我们一起来搞起吧。

一、下载安装SonarQube

直接百度搜索官网,进去找到下载地址,这里我采用6.7.6版本

1直接wget下载到服务器上

weget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-6.7.6.zip

 2然后解压

unzip sonarqube-6.7.6.zip

3创建mysql数据库,这里不赘述,我本来就装了,直接新建了一个库

mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> GRANT ALL ON mysqladmin.* TO 'sonar'@'localhost' IDENTIFIED BY 'mysqladmin';
mysql> GRANT ALL ON mysqladmin.* TO 'sonar'@'%' IDENTIFIED BY 'mysqladmin';
mysql> FLUSH PRIVILEGES;

4敲黑板,坑点,创建elasticsearch用户

新版本SonarQube加入了elasticsearch ,同时引入了elasticsearch的坑,那就是不能使用root用户运行,如果直接启动会报错

java.lang.RuntimeException: can not run elasticsearch as root

 解决方法为创建一个新用户,授权并使用新用户启动sonar:

adduser elsearch

passwd  elsearch

输入两次密码

(PS.偷偷说一句,我之前在服务器上搭了elk,这些都做过了,上面是随便写的,应该没问题……)

用户创建好之后,给sonar目录授权(使用root用户)

chown -R elsearch:elsearch /mpjava/soft/sonarqube-6.7.6

 授权之后切换到elsearch用户

su elsearch

5修改配置文件/sonarqube-6.7.6/conf/sonar.properties,配置数据库

#数据库用户
sonar.jdbc.username=mysqladmin  
#数据库密码          
sonar.jdbc.password=mysqladmin    
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&character

 6.修改防火墙设置,开放9000端口(如果自己修改了默认端口,按实际情况来)

7.启动

[elsearch@ap01 sonarqube-6.7.6]$ ./bin/linux-x86-64/sonar.sh start

Starting SonarQube...
Started SonarQube.
 

二、初始化SonarQube

浏览器输入http://sonar服务器ip:9000

点击右上角Sign In,初始用户名密码为admin/admin

第一次登陆会让你输入一个token,输入之后会返回一个key给你

sonarqube扫描python 的代码安全漏洞 sonar代码检查_mysql

下一步是选择你的语言与编译工具,根据你选择的,系统会给出集成和运行方法

sonarqube扫描python 的代码安全漏洞 sonar代码检查_bc_02

 

好了,现在基本搞定,不过英文看起来老难受了,还是装个中文插件吧

sonarqube扫描python 的代码安全漏洞 sonar代码检查_bc_03

我这里直接傻瓜安装,完成后重启,界面就变中文了……

 三、开始检测

首先来个基本的,我的项目是Gradle项目,修改build.gradle,加入以下内容

buildscript {
		  repositories {
		   jcenter()
		   maven {url "https://plugins.gradle.org/m2/"}
		  }
		  dependencies {
			classpath "org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.6"
		  }
	}
	apply plugin: "org.sonarqube"

	sonarqube{
	    properties{
	        property "sonar.host.url", "http://192.168.95.45:9000/"     //sonarqube 服务器地址
	        property "sonar.verbose", "true"
	        property "sonar.login", "3cf7d988eb5eca00ed63ce2aced8a497b1a11df6"   //sonar.login 配置token,不用配置也可以检测
	    }
	}

接着,输入命令

gradle sonarqube 

#跳过测试

gradle sonarqube -x test

检测完成,登陆sonarQube

sonarqube扫描python 的代码安全漏洞 sonar代码检查_mysql_04

 

OK!下面就根据提示修改代码的质量问题吧

四、集成到jenkins

登陆jenkins,这里直接采用最简便办法……增加一个构建动作,执行gradle sonarqube

sonarqube扫描python 的代码安全漏洞 sonar代码检查_bc_05

好了,当jenkins构建的时候就会自动检测了,每次构建之后还是去控制台看看结果,有问题就再改了提交,自动构建。

还有其他的集成方法,安装N多插件啥的,大家有兴趣可以试试。