765DevOps

Thinking is the problem, Doing is the answer !

0%

代码扫描(二)-SonarQube安装

SonarQube的安装会给予版本有些差异,建议根据你选择的版本结合官方的文档进行安装,中间遇到问题再自行Google一下啦。本文主要是讲解一下版本的安装:SonarQube:7.9 LTS +PostgreSQL 10

版本选择

不同的版本对应的插件选择和数据库支持不同,同时需要考虑版本的稳定性。考虑稳定性,避免出现问题无法跟进处理解决,生产环境不考虑最新版本。

SonarQube:7.9 LTS

SonarQube v7.9 的前置依赖说明(https://docs.sonarqube.org/7.9/requirements/requirements/)

  • 数据库:PostgreSQL 10
  • Java JDK:OpenJDK 11

安装说明

1、OpenJDK 11安装

官方安装引导:https://openjdk.java.net/install/

安装包(Linux/x64):(官方下载

解压缩

> tar -zxvf openjdk-11+28_linux-x64_bin.tar.gz

配置环境变量

> 末尾增加如下内容(根据自己jdk目录修改):
> export JAVA_HOME=/usr/local/jdk-11
> export CLASSPATH=JAVAHOME/lib:JAVA_HOME/lib:CLASSPATH
> export PATH=JAVAHOME/bin:JAVA_HOME/bin:PATH

验证

> java -version

2、PostgreSQL 10安装

官方的安装引导:https://www.postgresql.org/download/linux/redhat/

  • Select version:10
  • Select platform:CentOS 7
  • Select architecture: x86_64

执行安装脚本及初始化启动:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装repo源
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 安装服务端
sudo yum install -y postgresql10-server

# PGsql进行初始化
sudo /usr/pgsql-10/bin/postgresql-10-setup initdb

# 加入开机启动
sudo systemctl enable postgresql-10

# 启动PGsql
stl start postgresql-10

# 查看服务状态
systemctl status postgresql-10.service

初始化SonarQube使用的数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 切换到postgres用户
su - postgres

# 连接到数据库
psql

# 创建数据库
CREATE DATABASE sonarqube;

# 创建用户
CREATE USER sonarqube WITH PASSWORD 'xxxxx';

# 设置权限
GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonarqube;

# 创建授权(必须)
ALTER DATABASE sonarqube owner to sonarqube;

initdb初始化数据目录时,它会安装一个默认的pg_hba.conf文件(使用命令:systemctl status postgresql-10.service查看位置),修改pg数据的pg_hba.conf(pg_hba.conf文件说明)将认证 ident 改为 md5,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# TYPE DATABASE USER ADDRESS METHOD

# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#host replication postgres 127.0.0.1/32 ident
#host replication postgres ::1/128 ident
#host replication sonar 127.0.0.1/32 ident

3、SonarQube 7.9安装

官方的安装引导:https://docs.sonarqube.org/7.9/setup/install-server/

安装包:(官方下载

创建sonar用户

> sudo useradd sonar

> passwd sonar (密码:xxxx)

linux平台文件数限制

1
2
3
4
5
6
7
# 设置系统最大文件数
sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536

# 设置sonar用户再打文件数 文件:/etc/security/limits.d/99-sonarqube.conf (or /etc/security/limits.conf as you wish),注:终端需退出重登生效或source后生效?
sonar - nofile 65536
sonar - nproc 4096

安装配置

  • 数据库链接
1
2
3
> sonar.jdbc.username=sonarqube
> sonar.jdbc.password=mypassword
> sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube
  • ES存储
1
2
> sonar.path.data=/opt/data/sonarqube/data
> sonar.path.temp=/opt/data/sonarqube/temp
  • Web Server配置

自己设定启动端口配置即可

脚本启动

1
> ${sonar_home}/bin/linux-x86-64/sonar.sh start

服务器部署,注意加入到开机启动项中,,此处我是加入 rc.local 文件中

1
2
# sonarqube server
su - sonar -c "/opt/app/sonarqube/sonarqube-7.9.6/bin/linux-x86-64/sonar.sh start"

4、SonarQube Scanner

官方的安装引导:https://docs.sonarqube.org/7.9/analysis/scan/sonarscanner/

安装包:(官方下载

安装:

1
2
3
4
5
6
7
# 设置SonarQube Server,位置:$install_directory/conf/sonar-scanner.properties
#----- Default SonarQube server
sonar.host.url=http://localhost:9000

# 将$install_directory/bin,加入到环境变量PATH

# 使用 sonar-scanner -h ,做验证

**每个扫描项目的根目录加入:**sonar-project.properties

sonar-project.properties示例: browsed or downloaded

5、SonarQube Plugin

  • 社区版支持多分支检测: sonarqube-community-branch-plugin(1.3.2老版本,安装区别现说明:Copy the plugin JAR file to the extensions/plugins/ and the lib/common/ directories of your SonarQube instance and restart SonarQube)
  • 汉化包(不建议,总觉得怪怪的):直接在应用市场检索按照对应的版本即可(jar插件下载:sonar-l10n-zh

6、相关配置

  • 解决增量代码小于20行,QG不生效情况:

> 配置:sonarqube → quality gates → create/copy a new QG , set :Lines to Cover on New Code to 0

问题记录

1、Some Quality Gate conditions on New Code were ignored because of the small number of New Lines

但分支模式增量代码扫描,少于20行时,代码坏味道无法检测到,可以参考:SONAR-9352论坛讨论

解决:解决方案说明参考 论坛讨论

步骤:sonarqube → quality gates → create/copy a new QG , set :Lines to Cover on New Code to 0

2、the main branch has no lines of code

扫描php,遇到的错误,主要原因是唯一的php的文件在解析阶段就出现错误,无法正常解析,也就没有扫描文件,更没有扫描结果了。

参考资料

  1. SonarQube安装及踩坑体验
  2. 调研sonarqube版本区别
  3. 从零开始针对 .NET 应用的 DevOps 运营实践 - Jenkins & SonarQube 安装配置