SonarQube 与 Jenkins 简介
SonarQub e 是一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题。同时,它提供了丰富的插件,支持多种语言的检测, 如 J ava、Python、Groovy、C、C++等几十种编程语言的检测。它主要的核心价值体现在如下几个方面:
SonarQube7.8 以上必须使用 java11, 不支持mysql
- 检查代码是否遵循编程标准:如命名规范,编写的规范等。
- 检查设计存在的潜在缺陷:SonarQube 通过插件 Findbugs、Checkstyle 等工具检测代码存在的缺陷。
- 检测代码的重复代码量:SonarQube 可 以展示项目中存在大量复制粘贴的代码。
- 检测代码中注释的程度:源码注释过多或者太少都不好,影响程序的可读可理解性。
- 检测代码中包、类之间的关系:分析类之间的关系是否合理,复杂度情况。
SonarQube 平台是由 4 个部分组成:
- SonarQube Server
- SonarQube Database
- SonarQube Plugins
- SonarQube Scanner
SonarQube 与 SonarQube-Scanner 的安装与配置
SonarQube
在 SonarQube 网,我们可以下载最新的 Sonar 安装包,本节以 Linux 系统为例,搭建 SonarQube 平台,解压到任意目录,如:unzip sonarqube5.6.zip。
SonarQube 自带了一个 H2 的数据库,当然为了获得更好的性能我们可以指定一个外部的数据库,在这里我们使用 MySQL 数据库。 先在 Mysql 数据库中建立一 个 Sonar 数据库,主要用于存放分析结果的数据,如 图 1 :
下载:
https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.8.zip
创建sonar MySQL 数据库
create database sonar grant all PRIVILEGES on sonar.* to sonar@'%' identified by '123456'; flush privileges;
进入解压的 SonarQueb 目录,在系统路径里面配好 path,配置如下:
#sonar profile export SONAR_HOME=/data/sonarqube-7.8 export PATH=${SONAR_HOME}/bin:${PATH}
创建用户:
groupadd sonar useradd -g sonar -s /sbin/nologin sonar # 设置权限 chown sonar:sonar -R /data/sonarqube-7.8
修改配置文件 /data/sonarqube-7.8/conf/sonar.properties
,如下:
主要修改3个参数
sonar.jdbc.username sonar.jdbc.password sonar.jdbc.url
...
# User credentials.
# Permissions to create tables, indices and triggers must be granted to JDBC user.
# The schema must be created first.
#sonar.jdbc.username=
#sonar.jdbc.password=
sonar.jdbc.username=sonar
sonar.jdbc.password=123456
#----- Embedded Database (default)
# H2 embedded database server listening port, defaults to 9092
#sonar.embeddedDatabase.port=9092
#----- DEPRECATED
#----- MySQL >=5.6 && <8.0
# Support of MySQL is dropped in Data Center Editions and deprecated in all other editions
# Only InnoDB storage engine is supported (not myISAM).
# Only the bundled driver is supported. It can not be changed.
#sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.jdbc.url=jdbc:mysql://172.16.230.84:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
...
启动:
# 切换到sonar用户 # su -s /bin/bash - sonar $ cd /data/sonarqube-7.8/bin/linux-x86-64 $ ./sonar.sh console
其中有输出一个报错
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
解决办法
1. 修改sonar配置 /data/sonarqube-7,8/conf/sonar.properties
# Same as previous property, but allows to not repeat all other settings like -Xmx #sonar.search.javaAdditionalOpts= sonar.search.javaAdditionalOpts=-Dbootstrap.system_call_filter=false
2.修改 /data/sonarqube-7.8/conf/wrapper.conf
#******************************************************************** # Wrapper Java #******************************************************************** wrapper.java.additional.1=-Dsonar.wrapped=true -Dbootstrap.system_call_filter=false wrapper.java.additional.2=-Djava.awt.headless=true
3. 修改 /data/sonarqube-7.8/elasticsearch/config/elasticsearch.yml
# ----------------------------------- Memory ----------------------------------- # # Lock the memory on startup: # bootstrap.memory_lock: false bootstrap.system_call_filter: false
再次启动
$ cd /data/sonarqube-7.8/bin/linux-x86-64 $ ./sonar.sh console
如果没有问题的话,关闭console
方式启动,使用Ctrl+c
使用后台启动
$ cd /data/sonarqube--7.8/bin/linux-x86-64 $ ./sonar.sh start
点击登录
目前只要默认是8.4.1的中文插件, 需要到github 找对应的版本
# 拷贝到插件目录
cp sonar-l10n-zh-plugin-1.28.jar /data/sonarqube-7.8/extensions/plugins
#重启sonar
./sonar.sh restart
Jenkins 与 SonarQube 集成插件的安装与配置
Jenkins 是一个支持自动化框架的服务器,我们这里不做详细介绍。Jenkins 提供了相关的插件,使得 SonarQube 可以很容易地集成。登陆 jenkins,点击”系统管理”,如图 4。
图 4. Jenkins 系统管理
点击管理插件。
Jenkins 管理插件
在可选插件中搜索”SonarQube”并安装它,如图 5。
图 5. Jenkins 安装 SonarQube
插件配置,登录 sonarqube 服务器
http://172.16.230.84:9000 点击右侧账号图标-->我的账号-->安全
输入 jenkins,点击生成。
注意:这个输入框的字符串,可以随意。这里表示给jenkins使用的!切记要保存好!
创建jenkins token
点击 jenkins -->凭据 --> 系统 --> 全局凭据--> 添加凭据
输入在sonarqube中生成的token
配置 SonarQube Server
进入 Jenkins 系统管理 – 系统设置,配置 SonarQube Server 信息
由于 SonarQube 在本机运行,直接就是 http://localhost:9000
进入 Jenkins 系统管理 - Global Tool Configuration,配置 SonarQube Scanner
1. 下载安装
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.4.0.2170.zip unzip sonar-scanner-cli-4.4.0.2170.zip mv sonar-scanner-cli-4.4.0.2170 /data/
输入安装路径
四、项目配置
java
使用构建后步骤进行代码分析需要使用 Maven 对代码进行编译,所以需要有 Maven 的配置文件,例如 pom.xml。
为新建的 Jenkins 项目配置构建后操作步骤,在构建后步骤配置窗口中需要填入 Maven 的构建配置 xml 文件
配置构建后操作步骤
sonar.projectKey=$JOB_NAME sonar.projectName=$JOB_NAME sonar.language=java sonar.login=admin sonar.password=admin sonar.java.binaries=$WORKSPACE/smr-platform-service/smr-biz/target/classes
注意:sonar.java.binaries 表示java的源码路径
参数解释:
Task to run 输入框中输入 scan,即分析代码;
Path to project properties:可选择的输入框,可以指定一个 sonar-project.properties 文件,如果不指定则使用项目默认的 properties 文件;
Analysis properties:输入一些配置参数传递给 SonarQube,这里的参数优先级高于 sonar-project.properties 文件里面的参数,所以可以在这里来配置所有的参数以替代 sonar-project.properties 文件
注:SonarQube Scanner配置可以直接在项目根目录中创建一个文件sonar-project.properties,然后使用Path to project properties中指定属性文件,或者直接在Analysis Properties中配置
Additional arguments:可以输入一些附加的参数,示例中的-X指进入 SonarQube Scanner 的 Debug 模式,输出更多的日志信息
查看分析结果
登录到SonarQube,查看结果
python
sonar.projectKey=$JOB_NAME sonar.projectName=$JOB_NAME sonar.language=python sonar.login=admin sonar.password=admin
vue
#projectKey项目的唯一标识,不能重复 sonar.projectKey=$JOB_NAME sonar.projectName=$JOB_NAME sonar.projectVersion=1.0 sonar.sourceEncoding=UTF-8 sonar.modules=javascript-module sonar.login=admin sonar.password=admin # JavaScript module javascript-module.sonar.projectName=JavaScript Module javascript-module.sonar.language=js javascript-module.sonar.sources=. javascript-module.sonar.projectBaseDir=src
报错处理办法: /data/sonarqube-7.8/temp/ 权限问题, chown -R sonar.sonar /data/sonarqube-7.8/temp/ *
参考资源
https://www.ibm.com/developerworks/cn/devops/1612_qusm_jenkins/index.html