jenkins2.236 + sonarqube7.6 + sonar-scanner3.3的集成配置和生产环境使用示例

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中查看结果

原文地址:https://www.cnblogs.com/reblue520/p/14702171.html