文章目录
  1. 1 Sonar 服务器的安装
    1. 1.1 系统需求
    2. 1.2 安装 MySQL Server
    3. 1.3 下载 SonarQube(V6.2)
    4. 1.4 修改 SonarQube 配置
    5. 1.5 启动服务
    6. 1.6 防火墙放行
    7. 1.7 安装插件 SonarQube
    8. 1.8 生成认证令牌(Token)
    9. 1.9 部署至 Tomcat
  2. 2 Jenkins 接入 Sonar
    1. 2.1 Jenkins 插件的安装与设置
    2. 2.2 调整 Jenkins 构建设置
    3. 2.3 构建错误排查
    4. 2.4 查看报告

通常,单一的 Jenkins 对于项目的持续集成够用了。本文总结另外一种流行方案,Jenkins 与 Sonar 集成:Sonar 是 Jenkins 之外独立运行的一个服务。Jenkins 中安装插件 SonarQube(并配置其 Sonar Server 的 URL / AccessToken 等信息),构建完毕后,该插件把报告数据提交给 Sonar Server 解析,Sonar Server 最终以量化图形方式展示代码质量变化。

作者:王克锋
出处:https://kefeng.wang/2017/01/10/jenkins-sonar/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。

1 Sonar 服务器的安装

1.1 系统需求

  • JDK8+
  • 内存 2GB+
  • MySQL 5.6+

1.2 安装 MySQL Server

请参考我另外一篇文章:MySQL 安装及其单机多实例部署

准备 sonar 数据库(sonar)和用户(sonar/Sonar6.2):

1
2
3
4
5
## mysql -A -uroot -pMySQL5.7
MySQL> CREATE USER 'sonar'@'localhost' IDENTIFIED BY 'Sonar6.2';
MySQL> CREATE DATABASE sonar CHARACTER SET UTF8;
MySQL> GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'localhost';
## mysql -A -usonar -pSonar6.2 -Dsonar -e "SHOW CREATE DATABASE sonar"

1.3 下载 SonarQube(V6.2)

1
2
3
4
5
## https://www.sonarqube.org/downloads/
## wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-6.2.zip ## 下载失败
wget https://fossies.org/linux/misc/sonarqube-6.2.zip ## 125M, MD5=f13464a4a4c32f5fa4b075f2247f3d67
sudo unzip -q sonarqube-6.2.zip -d /opt/
sudo ls -l /opt/sonarqube-6.2/

1.4 修改 SonarQube 配置

1
2
3
4
5
6
7
8
9
10
## sudo vim /opt/sonarqube-6.2/conf/sonar.properties
sonar.web.javaOpts=-server -Xms256m -Xmx768m -XX:+HeapDumpOnOutOfMemoryError
sonar.jdbc.username=sonar
sonar.jdbc.password=Sonar6.2
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

## 下面设定访问网址为 http://centos:9000/sonar
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.web.context=/sonar

1.5 启动服务

1
2
3
4
5
sudo /opt/sonarqube-6.2/bin/linux-x86-64/sonar.sh stop ## 停止服务
sudo /opt/sonarqube-6.2/bin/linux-x86-64/sonar.sh start ## 启动服务
sudo /opt/sonarqube-6.2/bin/linux-x86-64/sonar.sh restart ## 重启服务
sudo /opt/sonarqube-6.2/bin/linux-x86-64/sonar.sh console ## 控制台启动
sudo tail -f /opt/sonarqube-6.2/logs/sonar.log ## 查看日志

1.6 防火墙放行

1
2
3
### sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT
### 重启生效: sudo systemctl restart iptables

1.7 安装插件 SonarQube

浏览器访问 http://centos:9000/sonar,用预设的管理员账号(admin/admin)登陆;
在线安装:进入插件中心 (Administration / System / Update Center / Available Plugins) 找到所需的插件,点击右侧的 “Install” 开始安装;
jenkins sonar-plugins
离线安装:在线安装容易失败,可尝试离线安装,下载插件 jar 文件至插件目录下,并重启 SonarQube 生效;
插件 jar 文件的下载地址,可以到在线安装页找到插件的 Homepage 再找 releases,如下:

  • Git: 已自带安装;
  • SVN: 已自带安装;
  • Java: 已自带安装,Java 源代码解析,计算指标等;
  • JavaScript: 已自带安装;
  • Chinese Pack:SonarQube 页面汉化;
  • Findbugs
  • Checkstyle
  • PMD
  • SonarGraph

插件的离线安装脚本如下:

1
2
3
4
5
6
7
8
9
cd /opt/sonarqube-6.2/extensions/plugins/
sudo rm -rf sonar-csharp-plugin-*.jar
sudo wget https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.13/sonar-l10n-zh-plugin-1.13.jar
sudo wget https://github.com/SonarQubeCommunity/sonar-findbugs/releases/download/3.4.4/sonar-findbugs-plugin-3.4.4.jar
sudo wget https://github.com/SonarQubeCommunity/sonar-checkstyle/releases/download/2.4/sonar-checkstyle-plugin-2.4.jar
sudo wget https://github.com/SonarQubeCommunity/sonar-pmd/releases/download/2.6/sonar-pmd-plugin-2.6.jar
sudo wget https://github.com/SonarQubeCommunity/sonar-sonargraph/releases/download/sonar-sonargraph-plugin-3.5/sonar-sonargraph-plugin-3.5.jar
sudo /opt/sonarqube-6.2/bin/linux-x86-64/sonar.sh restart ## 重启服务
## 注意:不完整的 wget 下载文件必须删掉,否则会导致 SonarQube 启动失败!

1.8 生成认证令牌(Token)

外部系统(比如 Jenkins)访问 SonarQube 时要用到;
进入:Administration(配置) / Security(权限) / User(用户),找到用户 admin,点击 “Tokens” 一列;
弹出界面里:输入 TokenName=”admin”, 点击 “Generate”, 生成 “8687b74188c446f2e02ec6eb5ee9d80b88048406”

1.9 部署至 Tomcat

上面是 Sonar 以独立 server 方式运行,也可以改为集成至 Tomcat:

1
2
3
## 注意修改 $TOMCAT_HOME/bin/catalina.sh 初始内存 1G+
sudo /opt/sonarqube-6.2/war/build-war.sh ## 将sonar达成一个war包
sudo cp /opt/sonarqube-6.2/war/sonar.war %TOMCAT_BASE/web-apps/

2 Jenkins 接入 Sonar

2.1 Jenkins 插件的安装与设置

SonarQube Plugin

安装完毕后,进入:系统管理 / 系统设置 / SonarQube servers, 点击 “Add SonarQube” 按钮:

  • Name: SonarQube-6.2
  • Server URL: http://centos:9000/sonar
  • Server version: 5.3 or higher
  • Server authentication token: 8687b74188c446f2e02ec6eb5ee9d80b88048406(前面 SonarQube 生成的)

Jenkins 会把构建结果通过 URL和认证令牌发送给 SonarQube
sonar jenkins-config

2.2 调整 Jenkins 构建设置

构建设置 Build 中,指定 Maven goals: “sonar:sonar”
项目构建时就会自动上报构建报告给 Sonar

2.3 构建错误排查

构建如有报错,可查看 SonarQube 日志来分析:

1
2
3
## cat /opt/sonarqube-6.2/logs/web.log
Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (6428688 > 4194304).
You can change this value on the server by setting the 'max_allowed_packet' variable.

含义是 MySQL Server 的参数值设置过小,调整并重启 mysqld:

1
2
3
4
## sudo vim /etc/my.cnf
## sudo systemctl restart mysqld
[mysqld]
max_allowed_packet=64M ## default 4M

2.4 查看报告

进入登陆 SonarQube 查看:
http://centos:9000/sonar
下图展示的只是项目报告首页,每个链接进去能看到详情:
jenkins sonar-report

文章目录
  1. 1 Sonar 服务器的安装
    1. 1.1 系统需求
    2. 1.2 安装 MySQL Server
    3. 1.3 下载 SonarQube(V6.2)
    4. 1.4 修改 SonarQube 配置
    5. 1.5 启动服务
    6. 1.6 防火墙放行
    7. 1.7 安装插件 SonarQube
    8. 1.8 生成认证令牌(Token)
    9. 1.9 部署至 Tomcat
  2. 2 Jenkins 接入 Sonar
    1. 2.1 Jenkins 插件的安装与设置
    2. 2.2 调整 Jenkins 构建设置
    3. 2.3 构建错误排查
    4. 2.4 查看报告