简单说明:

  • SonarQube 是一个自动化的代码审查工具,能够方便的集成到常见的各种CI/CD中,实现对代码变更后的自动化审查
  • 官方文档:https://docs.sonarqube.org/7.9/
  • 环境需求:https://docs.sonarqube.org/7.9/requirements/requirements/
  • 本架构的集成方案是Gitlab上接收到代码的push请求时,触发Webhook调用Jenkins,由Jenkins调用sonar的scanner完成代码审查

部署Gitlab:

  • 依据《CentOS7 gitlab安装搭建简单维护》部署Gitlab 192.168.77.100

部署Jenkins:

  • 依据《CentOS7 Jenkins部署 Maven项目构建测试》部署Jenkins 192.168.77.101

部署SonarQube:

  • 依据《CentOS7实验机模板搭建部署》部署一台实验机 192.168.77.102
# 主机名和hosts文件
HOSTNAME=sonar
hostnamectl set-hostname "$HOSTNAME"
echo "$HOSTNAME">/etc/hostname
echo "$(grep -E '127|::1' /etc/hosts)">/etc/hosts
echo "$(ip a|grep "inet "|grep -v 127|awk -F'[ /]' '{print $6}') $HOSTNAME">>/etc/hosts
# jdk11环境
cd /usr/local
tar -xf /tmp/jdk-11.0.5_linux-x64_bin.tar.gz
chown root: /usr/local/jdk-11.0.5/ -R
echo 'export JAVA_HOME=/usr/local/jdk-11.0.5'>>/etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH'>>/etc/profile
source /etc/profile
java -version
  • 安装数据库
# PostgreSQL10 安装
yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
yum -y install postgresql10 postgresql10-server
/usr/pgsql-10/bin/postgresql-10-setup initdb
systemctl enable postgresql-10
systemctl start postgresql-10
# 设置库用户postgres密码为postgres,新建库,用于sonar
su - postgres
psql -U postgres
ALTER USER postgres WITH PASSWORD 'postgres';
create database sonarqube owner postgres;
grant all on database sonarqube to postgres;
\q
exit
# 配置远程放行
sed -i "s/^#listen_addresses =.*$/&\nlisten_addresses = '*'/gp" /var/lib/pgsql/10/data/postgresql.conf
sed -i 's|^# IPv4 local connections:.*$|&\nhost  all  all  0.0.0.0/0  md5|gp' /var/lib/pgsql/10/data/pg_hba.conf   
systemctl restart postgresql-10
  • 部署安装 SonarQube 7.9 LTS
useradd sonar
echo 'sonar'|passwd --stdin sonar
cat >>/etc/security/limits.conf<<EOF
sonar soft nofile 65536
sonar hard nofile 65536
sonar soft nproc 4096
sonar hard nproc 4096
EOF
cat >>/etc/sysctl.d/99-sysctl.conf<<EOF
vm.max_map_count=262144
EOF
sysctl -p
sysctl -a|grep vm.max_map_count

cd /tmp
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.1.zip
cd /usr/local/
unzip /tmp/sonarqube-7.9.1.zip
ln -s sonarqube-7.9.1 sonarqube
chown -R sonar: sonarqube-7.9.1
echo 'export SONAR_HOME=/usr/local/sonarqube'>>/etc/profile
echo 'export PATH=$SONAR_HOME/bin:$PATH'>>/etc/profile
source /etc/profile

cat >>/usr/local/sonarqube/conf/sonar.properties<<EOF
# 配置数据库链接
sonar.jdbc.username=postgres
sonar.jdbc.password=postgres
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube
# 修改数据存储目录,该目录需要考虑外挂存储
sonar.path.data=/usr/local/sonarqube/data
sonar.path.temp=/usr/local/sonarqube/temp
# 配置监听IP和端口以及URL子目录
sonar.web.host=$(hostname -i)
sonar.web.port=9000
sonar.web.context=/
EOF

su - sonar
cd $SONAR_HOME/bin/linux-x86-64
./sonar.sh start
cd ../../logs/
# 浏览器访问 http://192.168.77.102:9000 用户名和密码为 admin/admin
# Administratorion ——> Marketplace ——> Plugins ——> Chinese Pack
# 搜索 Java,将搜索到的包全装上
# 从界面上重启sonarqube,刷新界面变中文了
# 安装后通过页面按钮重启Sonarqube
# 注意,可能会安装失败,原因是从 github 之上下载插件时不时的会抽风,多重试几次就好了

# 设置开机启动
su -
echo 'su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start"'>>/etc/rc.local

在这里插入图片描述


在Jenkins主机之上部署SonarQube Scanner:

  • 在jenkins中安装插件:SonarQube Scanner
    在这里插入图片描述
  • 在jenkins主机之上安装 SonarQube Scanner 部件,将其安装到jenkins用户之下
cd /tmp
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.0.0.1744-linux.zip
cd /usr/local/
unzip /tmp/sonar-scanner-cli-4.0.0.1744-linux.zip
ln -s sonar-scanner-4.0.0.1744-linux sonar-scanner
chown -R jenkins: sonar-scanner-4.0.0.1744-linux
echo 'export SONAR_SCANNER_HOME=/usr/local/sonar-scanner'>>/etc/profile
echo 'export PATH=$SONAR_SCANNER_HOME/bin:$PATH'>>/etc/profile
source /etc/profile
cd $SONAR_SCANNER_HOME/conf
cat >>sonar-scanner.properties<<EOF
sonar.host.url=http://192.168.77.102:9000
sonar.sourceEncoding=UTF-8
EOF
sonar-scanner -h
  • 部署node工具
cd /tmp
wget https://nodejs.org/dist/v12.16.3/node-v12.16.3-linux-x64.tar.xz
mkdir -p /usr/local/lib/nodejs && cd /usr/local/lib/nodejs
tar -xf /tmp/node-v12.16.3-linux-x64.tar.xz
export PATH=/usr/local/lib/nodejs/node-v12.16.3-linux-x64/bin:$PATH
echo 'export PATH=/usr/local/lib/nodejs/node-v12.16.3-linux-x64/bin:$PATH'>>/etc/profile
node -v
npm version
npx -v
npm config set registry https://registry.npm.taobao.org
npm config get registry
npm install -g cnpm --registry=https://registry.npm.taobao.org
alias npm=cnpm
echo 'alias npm=cnpm'>>/etc/profile
  • 使用SonarQube Scanner手动扫描测试
su - jenkins
cd /tmp/
git clone git@192.168.77.100:root/test.git
cd test
cat >sonar-project.properties<<EOF
sonar.projectKey=test:project
sonar.projectName=test_project
sonar.projectVersion=1.0
sonar.sources=./
sonar.language=java
sonar.java.binaries=/tmp
sonar.host.url=http://192.168.77.102:9000
sonar.sourceEncoding=UTF-8
sonar.login=admin
sonar.password=admin
EOF
sonar-scanner
# 网页登录Sonarqube,查看分析结果,因为是一个空项目,因此没有任何报错信息

在这里插入图片描述


整合Jenkins和SonarQube:

  • 登录jenkins,系统管理,全局安全配置,勾掉防止跨站点请求伪造
    在这里插入图片描述
  • 网页登录jenkins,系统管理,全局工具配置,SonarQube Scanner,将安装的sonar-scanner配置上去
    在这里插入图片描述
  • 网页登录sonar,配置,权限,用户,admin,令牌,创建令牌,并记录token:2eee01966691aeeeb1bd6a55c43a410b9f081e44
    在这里插入图片描述
    在这里插入图片描述
  • 网页登录jenkins,凭据,jenkins,全局凭据,添加凭据,Secret text类型,将上一步的token填入
    在这里插入图片描述
  • 网页登录jenkins,系统管理,系统设置,SonarQube servers,配置名字和url,选择上一步添加的凭据
    在这里插入图片描述

配置Jenkins任务,挂接Gitlab勾子,触发扫描测试:

  • 配置Jenkins任务
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 配置Gitlab的Webhook
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

[TOC]

Logo

一站式 AI 云服务平台

更多推荐