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 #测试安装是否成功,能不能正常启动
安装成功也启动成功会得到如下窗口:
退出 ./sonar.sh console, 执行 ./sonar.sh start。 之后systemctl stop firewalld关闭Linux防火墙,可以在浏览器中访问sonarqube的web ui: http://IP:9000, 默认用户名和密码: admin/admin.
4. 安装 c++ community 插件
https://github.com/SonarOpenCommunity/sonar-cxx/releases,因为只要扫描c++, 不用装c, 如安装了在执行Sonar scanner的时候会冲突。装完需重启:
在Quality Profiles 选挪 c++(c...), 点击settings图标再点Copy->copy the Default profile, **所有的 rules。并把新拷的设置为默认选项。
在 Administration->Configuration ->C++(C...)->Cppcheck report(s) 输入: cppcheck-report.xml,cppcheck.xml
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:
扫描结果如图: