Sonarqube8.3.1安装和配置 C++ community扫描C++代码

       虽然Sonarqube有自己的 c++ plugin, 但不是开源的。所以我们这里利用 C++ community 和cppcheck对C++代码进行扫描。

这里的Linux安装环境是CentOS。

1. 安装Java OpenJDK:

mdkir /data/openjdk
cd /data/openjdk
wget https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_linux-x64_bin.tar.gz
## 解压到/data/openjdk/jdk-11 
tar -zxvf openjdk-11+28_linux-x64_bin.tar.gz
添加环境变量到 /etc/profile:

vim /etc/profile

export JAVA_HOME=/data/openjdk/jdk-11
export PATH=$JAVA_HOME/bin:$PATH

## 使环境变量生效:
source /etc/profile

#测试一下:

[[email protected] jdk-11]# java -version
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

2. 安装和配置PostgreSQL12 (根据Sonarqube的版本选择PostgreSQL版本)

yum install -y https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum install -y postgresql12
yum install -y postgresql12-server

#安装完了初始化数据库,设置数据库服务自动启动
/usr/pgsql-10/bin/postgresql-12-setup initdb
systemctl enable postgresql-12
systemctl start postgresql-12


修改PostgreSQL的配置文件允许对数据库的访问:
sudo vi /var/lib/pgsql/12/data/pg_hba.conf

源文件:
# 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 ident
# IPv6 local connections:
host all all ::1/128 ident
 

修改后的文件:

# TYPE DATABASE USER ADDRESS METHOD

# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5

#修改后需重启数据库让配置生效:
systemctl restart postgresql-10

##切换到postgres用户,登陆postgresql,创建用户 snoar 和 数据库 sonar:

su postgres
psql -U postgres
CREATE USER sonar WITH PASSWORD 'sonar';
CREATE DATABASE sonar WITH OWNER sonar ENCODING 'UTF8';
grant all privileges on database sonar to sonar;
\l

psql -h 127.0.0.1 -d sonar -U sonar #测试连接
exit

3. 安装 SonarQube

vi /etc/security/limits.conf   #修改配置文件加入如下内容:

* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096

vi /etc/sysctl.conf:
vm.max_map_count=262144
fs.file-max=65536
更改 /etc/security/limits.conf, /etc/sysctl.conf 这两个配置文件后重启系统使配置生效。

#为ElasticSearch创建一个用户sonar并配置该用户访问权限。

adduser sonar
passwd sonar

mkdir -p /data/sonarqube
chown -R sonar.sonar /data/sonarqube
chmod -R 770 /data/sonarqube
cd /data/sonarqube
get sonarqube-8.3.1.34397.zip
unzip sonarqube-8.3.1.34397.zip
sudo vi /data/sonarqube/conf/sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar-db-password
sonar.jdbc.url=jdbc:postgresql://localhost/sonar

su - sonar

cd /data/sonarqube/sonarqube-8.3.1.34397/bin/linux-x86-64

./sonar.sh console #测试安装是否成功,能不能正常启动

安装成功也启动成功会得到如下窗口:

Sonarqube8.3.1安装和配置 C++ community扫描C++代码

退出 ./sonar.sh console, 执行 ./sonar.sh start。 之后systemctl stop firewalld关闭Linux防火墙,可以在浏览器中访问sonarqube的web ui: http://IP:9000, 默认用户名和密码: admin/admin.

Sonarqube8.3.1安装和配置 C++ community扫描C++代码

4. 安装 c++ community 插件

https://github.com/SonarOpenCommunity/sonar-cxx/releases,因为只要扫描c++, 不用装c, 如安装了在执行Sonar scanner的时候会冲突。装完需重启:

Sonarqube8.3.1安装和配置 C++ community扫描C++代码

在Quality Profiles 选挪 c++(c...), 点击settings图标再点Copy->copy the Default profile, **所有的 rules。并把新拷的设置为默认选项。

Sonarqube8.3.1安装和配置 C++ community扫描C++代码

 在 Administration->Configuration ->C++(C...)->Cppcheck report(s) 输入: cppcheck-report.xml,cppcheck.xml

Sonarqube8.3.1安装和配置 C++ community扫描C++代码

5. Cppcheck扫描之后用Sonar Scanner分析生成的 xml report并展示在Sonarqube Server

在Jenkins Slave中安装cppcheck: http://cppcheck.sourceforge.net/。装完之后需加到环境变量中,执行cppcheck --xml --xml-version=2 --enable=all ./ 2> cppcheck-report.xml 扫描代码。因用cppcheck扫描后要需Sonarqube去分析它,需要装sonar-scanner,之后可以从Sonarqube server中拿到扫描的Commandline:

Sonarqube8.3.1安装和配置 C++ community扫描C++代码

扫描结果如图:

Sonarqube8.3.1安装和配置 C++ community扫描C++代码