jenkins2.236 + sonarqube7.6 + sonar-scanner3.3的集成配置和生产环境使用示例
jenkins相关:
jdk1.8.181 + maven 3.6.3 + tomcat8.0.53
sonar相关:
mysql5.7 + sonarqube7.6 + jdk1.8.181 + sonar-scanner
jenkins集成sonar的主要步骤
a.jenkins是一个持续集成的web系统,使用Java开发,需要安装jdk环境,我们使用 jdk1.8.201 + tomcat8.0.53的方式部署了jenkins,我们此处使用专门的apache用户来运行jenkins
b.sonarqube是一个web平台,里面集成了很多功能,主要用来检查代码的一些常见问题,比如漏洞,语法错误等
此次我们安装sonarqube7.6 + mysql5.7 ,sonarqube自己集成了elasticsearch,不需要单独安装,但是运行sonarqube需要非root用户,最好加一个账号专门来运行 sonarqube 这个web系统
sonarqube可以和jenkins放同一个服务器中,也可以独立部署(建立独立部署)
c.sonar-scanner 这个系统要部署在jenkins服务器中
d.maven可以部署也可以不部署(此处我们也部署了,主要是用来构建java项目使用)
e.安装jenkins for sonar这个插件,将sonar-canner和jenkins及sonnerqube 这几个系统关联起来
本次我们已经部署好了jdk + jenkins + tomcat,只需要在上面集成 sonarqube
一、安装配置sonarQube
发现的问题:mysql8.0用不了,sonar6.7报未知错误,升级到7.6以后同样的配置就可以启动
1.安装mysql5.7,并且添加sonar数据库和专用用户
要安装指定的mysql版本,比如mysql要求5.6或者5.7 你要是使用mysql8.0 就会失败,测试过8.0会失败
# 添加专用Mysql用户运行mysql程序
useradd -u 501 -G users -s /sbin/nologin -M -d /usr/local/mysql/bin mysql /usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/etc/my.cnf --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data
# 添加sonar数据库用户
CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar@341Jpw';
FLUSH PRIVILEGES;
2.安装sonarqube
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.6.zip unzip sonarqube-7.6.zip mv sonarqube-7.6 /usr/local cd /usr/local ln -s sonarqube-7.6 sonar
# 拷贝mysql驱动到指定位置
mkdir /usr/local/sonar/extensions/jdbc-driver/mysql/
cp /usr/local/sonar/lib/jdbc/mysql/mysql-connector-java-5.1.46.jar /usr/local/sonar/extensions/jdbc-driver/mysql/
# 添加linux系统运行sonar专用用户
groupadd sonar useradd sonar -g sonar chown -R sonar:sonar /usr/local/sonar chown -R sonar:sonar /usr/local/sonarqube-7.6
# 修改sonar配置
# vim /usr/local/sonar/conf/sonar.properties
sonar.web.javaOpts=-server -Xms2G -Xmx2G -XX:+HeapDumpOnOutOfMemoryError sonar.jdbc.username=sonar sonar.jdbc.password=sonar@341Jpw sonar.jdbc.url=jdbc:mysql://192.168.10.87:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false sonar.web.host=0.0.0.0 sonar.web.port=9000
# 启动打印日志
su sonar
sh /usr/local/sonar/bin/linux-x86-64/sonar.sh console
# 后台运行sonar
sh /usr/local/sonar/bin/linux-x86-64/sonar.sh start
# 登录
http://192.168.10.87:9000
默认账号密码 admin/admin
可以修改密码:
3.汉化sonarqube
找到对应的汉化版本安装包:https://github.com/xuhuisheng/sonar-l10n-zh/releases
将下载的汉化插件包 sonar-l10n-zh-plugin-1.26.jar 放到sonar的extensions/plugins目录
重启sonarqube
[sonar@sz_xxgc_cms_jenkins02_10_87 local]$ sonar/bin/linux-x86-64/sonar.sh stop
Stopping SonarQube...
Waiting for SonarQube to exit...
Stopped SonarQube.
[sonar@sz_xxgc_cms_jenkins02_10_87 local]$ sonar/bin/linux-x86-64/sonar.sh start
Starting SonarQube...
Started SonarQube.
添加token,并且加入到jenkins配置中
在configure system中添加sonarqube的服务器配置,注意是系统配置,否则找不到
SonarQube servers
二、安装配置sonarScanner
下载地址:https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/
# 此次我们安装sonaer-scanner3.3
https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.3.0.1492-linux.zip
1、解压sonar-scanner,配置环境变量
unzip sonar-scanner-cli-3.3.0.1492-linux.zip mv sonar-scanner-cli-3.3.0.1492-linux /usr/local/ ln -s sonar-scanner-3.3.0.1492-linux sonar-scanner SONAR_SCANNER_HOME=/usr/local/sonar-scanner PATH=SONAR_SCANNER_HOME/bin:$PATH
2、进入sonar-scanner解压缩之后的文件目录中,进入conf文件下,找到sonar-scanner.properties文件,并向其中添加MySQL数据库的连接配置信息如下:
# vim /usr/local/sonar-scanner/conf/sonar-scanner.properties
sonar.jdbc.url=jdbc:mysql://192.168.10.87:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false sonar.jdbc.username=sonar sonar.jdbc.password='sonar@341Jpw' sonar.sorceEncoding=UTF-8
三、安装配置maven
# vim /etc/profile
MAVEN_HOME=/usr/local/maven
PATH=$MAVEN_HOME/bin:$PATH
修改settings.xml文件/usr/local/apache-maven-3.6.3/conf/settings.xml
<pluginGroups> <pluginGroup>org.sonarsource.scanner.maven</pluginGroup> </pluginGroups> <profiles> <profile> <id>sonar</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <sonar.jdbc.url>jdbc:mysql://192.168.10.87:3306/sonar</sonar.jdbc.url> <sonar.jdbc.driver>com.mysql.jdbc.Driver</sonar.jdbc.driver> <sonar.jdbc.username>sonar</sonar.jdbc.username> <sonar.jdbc.password>sonar@341Jpw</sonar.jdbc.password> <sonar.host.url>http://192.168.10.87:9000/</sonar.host.url> </properties> </profile> </profiles>
Global Tool Configuration中添加jdk,maven,sonar-canner的配置
四、使用sonnar-scanner 对项目进行诊断
有两种方式,一种是直接在linux shell命令行中调用命令扫描,另外一种是在jenkins中调用
强烈建议先配置命令行调用,跑通了,再去配置jenkins和sonnaer集成,网上一堆配置sonar和jenkins集成的都是错的,把命令行的集成弄对了,jenkins集成参考即可
示例一:命令行扫描php测试项目
检测PHP项目,需要在sonar中先安装SonarPHP插件,github搜索php-sonar-runner项目,对这个项目进行检测
https://github.com/hasanyousuf/php-sonar-runner-unit-tests
unzip php-sonar-runner-unit-tests-master.zip
cd php-sonar-runner-unit-tests-master
/root/php-sonar-runner-unit-tests-master
# 直接在php目录运行sonar-scanner,用于实现代码质量分析
[rootphp-sonar-runner-unit-tests-master]# /usr/local/sonar-scanner/bin/sonar-scanner
示例二:命令行扫描java项目
修改maven源为aliyun否则很慢
<!-- 阿里镜像仓库 --> <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url> http://maven.aliyun.com/nexus/content/groups/public/ </url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>
拉取一个开源项目 jmx_exporter 做测试 git clone https://github.com/prometheus/jmx_exporter.git 在项目目录创建扫描配置文件 jmx_exporter-master/sonar-project.properties,各配置项如下: [root@sz_xxgc_cms_jenkins02_10_87 jmx_exporter]# cat sonar-project.properties # 项目名,如果项目名不存在会自动创建该项目 sonar.projectKey=my_java # 源码路径,设置为当前目录 sonar.sources=. # SonarQube 访问地址,根据实际情况填写 sonar.host.url=http://192.168.10.87:9000 # token,在 SonarQube 中创建的 token sonar.login=xx # 语言类型 sonar.language=java # 二进制文件目录,就是 .class 文件的目录,只有部分项目需要该配置 sonar.java.binaries=collector/target/classes,jmx_prometheus_httpserver/target/classes,jmx_prometheus_javaagent/target/classes # 源代码编码格式 sonar.sourceEncoding=UTF-8 进入项目目录 cd /root/jmx_exporter-master/ 需要先编译项目,主要是为了生成 .classs 文件 mvn clean package java项目代码目录下执行扫描 [root@sz_xxgc_cms_jenkins02_10_87 jmx_exporter]# /usr/local/sonar-scanner/bin/sonar-scanner
示例三:直接在jenkins中调用sonar
jenkins中调用sonar的配置
# 项目名,如果项目名不存在会自动创建该项目 sonar.projectKey=${JOB_NAME} # 源码路径,设置为当前目录 sonar.sources=. # SonarQube 访问地址,根据实际情况填写 sonar.host.url=http://192.168.10.87:9000 # token,在 SonarQube 中创建的 token sonar.login=token_xxx # 语言类型 sonar.language=php # java项目相关的配置参考 #sonar.language=java # 二进制文件目录,就是 .class 文件的目录,只有部分项目需要该配置 #sonar.java.binaries=collector/target/classes,jmx_prometheus_httpserver/target/classes,jmx_prometheus_javaagent/target/classes # 源代码编码格式 sonar.sourceEncoding=UTF-8
在sonarqube的web中查看结果