代码质量管理平台搭建

11 篇文章 0 订阅

代码质量管理平台搭建

sonar简介

sonar是一款静态代码质量分析工具,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,而且能够集成在IDE、Jenkins、Git等服务中,方便随时查看代码质量分析报告;
sonar通过配置的代码分析规则,从可靠性、安全性、可维护性、覆盖率、重复率等方面分析项目,风险等级从A~E划分为5个等级;同时,sonar可以集成pmd、findbugs、checkstyle等插件来扩展使用其他规则来检验代码质量;
sonar设置了质量门,通过设置的质量门评定此次提交分析的项目代码是否达到了规定的要求。
官方地址: https://www.sonarqube.org/
官方下载: 下载sonarqube7.8版本(sonarqube7.9+版本不支持mysql, sonarqube8.6+版本需jdk11)

在这里插入图片描述

服务准备

软件准备

A机器
jdk 1.8	
sonarqube 7.8 

B机器
git 2.34.1
mysql  5.7.34

C机器
jdk 1.8	
jenkins 2.335
maven 3.6.2
sonar-scanner 4.1	

注:建议A机器内存大于2G(否则sonarqube服务起不来)

系统准备

#请在A机器上执行linux命令
#1、文件数配置
vim /etc/security/limits.conf

*           soft    nofile          65536
*           hard    nofile          65536

ulimit -Hn
ulimit -Sn
#注:ulimit命令需重新登录系统进行查看
#2、进程数配置
vim /etc/security/limits.d/20-nproc.conf
*          soft    nproc     1024   
#改成如下
*          soft    nproc     4096
ulimit -a
#注:ulimit命令需重新登录系统进行查看
#3、vm配置
vim /etc/sysctl.conf
vm.max_map_count = 262144
sysctl -p
#请在B机器上执行linux命令
#mysql配置
mysql  -uroot  -p
mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
mysql> FLUSH PRIVILEGES;

vim /etc/my.cnf
binlog_format=row
service mysqld restart

服务配置

请在A机器上执行linux命令

sonar服务上传

cd /opt && rz
unzip sonarqube-7.8.zip && rm -rf sonarqube-7.8.zip
mv sonarqube-7.8 sonarqube
#注:上传本地sonar服务到linux

sonar.proterties配置

vim /opt/sonarqube/conf/sonar.properties
#sonar.jdbc.username= 行下添加
sonar.jdbc.username=sonar
#sonar.jdbc.password= 行下添加
sonar.jdbc.password=sonar
#sonar.jdbc.url 行下添加
sonar.jdbc.url=jdbc:mysql://B机器ip:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
#行尾添加解决启动报错
sonar.search.javaAdditionalOpts=-Dbootstrap.system_call_filter=false

wrapper.conf配置

vim /opt/sonarqube/conf/wrapper.conf
#wrapper.java.command=java 注释此行,在行下添加:
wrapper.java.command=/opt/jdk/jdk/bin/java
#注:jdk勿在/root下部署

服务权限设置

groupadd sonar
useradd sonar -g sonar
passwd sonar
chown -R sonar:sonar /opt/sonarqube/
#注:sonarqube服务不能用root启动

服务启动

服务启动

su sonar
cd /opt/sonarqube/bin/linux-x86-64
sh sonar.sh start     	#启动
# sh sonar.sh status	#状态
# sh sonar.sh restart	#重启
# sh sonar.sh stop		#停止

服务检验

#浏览器检验
http://A机器ip:9000/
#注:默认账号和密码都是admin

#命令检验
lsof -i:9000      #WebServer
lsof -i:9001      #WrapperSimpleApp,Elasticsearch,WebServer,CeServer

服务排查

问题:Unable to load component class org.sonar.scanner.xxxxx
方法: rm -rf /opt/sonarqube/temp/conf/es

服务汉化

请在A机器上执行linux命令

版本对照

https://github.com/xuhuisheng/sonar-l10n-zh

汉化包上传

cd /opt/sonarqube/extensions/plugins && rz
sh /opt/sonarqube/bin/linux-x86-64/sonar.sh restart
#注:要用sonar用户执行上传命令和sonarqube服务启动

服务检测

请在A机器上执行linux命令

命令查看

ls /opt/sonarqube/extensions/plugins

官网查看

https://redirect.sonarsource.com/doc/plugin-library.html

客户端配置

请在C机器上执行linux命令

软件下载

https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/

软件配置

cd /opt && rz
unzip sonar-scanner-cli-4.1.0.1829-linux.zip && rm -rf sonar-scanner-cli-4.1.0.1829-linux.zip
mv sonar-scanner-4.1.0.1829-linux sonar-scanner
vim /opt/sonar-scanner/conf/sonar-scanner.properties  
#配置如下:
sonar.host.url=http://192.168.188.142:9000
sonar.sourceEncoding=UTF-8

vim /etc/profile
export SONAR_SCANNER_HOME=/opt/sonar-scanner
export PATH=$PATH:$SONAR_SCANNER_HOME/bin
source /etc/profile
sonar-scanner -v

#注:配置完成后最好reboot系统,否则在下面通过jenkins执行时可能会报错:sonar-scanner:command not found

jenkins配置

请在C机器上执行linux命令

系统管理

插件管理
点击可选插件,搜索SonarQube Scanner, AnsiColor下载和安装,重启tomcat服务
全局工具配置-SonarQube Scanner
Name = SonarQube Scanner
SONAR_RUNNER_HOME = /opt/sonar-scanner
管理凭证-全局凭证
类型 = Secret text
范围 = 全局
Secret = 《sonarqube服务生成令牌》
描述 = sonarqube

sonarqube服务生成令牌

在这里插入图片描述在这里插入图片描述在这里插入图片描述

系统配置- SonarQube servers
Name= SonarQube
Server URL= http://A机器ip:9000
Server authentication token= sonarqube

job配置

使用jenkins服务code_pipeline job构建,构建环境处勾选- Color ANSI Console Output,默认值选xterm

shell配置

结合代码服务流水线部署平台增加unit_testing和sonar_scanner_code方法

#!/bin/sh

#init param
git_server=B机器ip
code_path=/data/java/code
tomcat_path=/opt/tomcat/tomcat
project_name=$1
branch_name=$2
env=$3

function git_pull_code(){
	echo -e "[34m ==开始拉取$project_name项目,$branch_name分支代码== [0m"
	rm -rf $code_path && mkdir -p $code_path && cd $code_path	
	
	git init
	git remote add origin git@$git_server:/home/git/repos/$project_name.git
	
	git pull origin $branch_name >/dev/null 2>&1
	if [  $? -eq 1 ];then
                echo -e "[31m ==拉取失败,需查项目$project_name,分支$branch_name是否存在== [0m"
                exit 0
        fi	

	git log --pretty=format:"%h - %an, %ai : %s" -5
}

function unit_testing(){
	echo -e "[34m 
==开始单元测试$project_name项目,$branch_name分支代码== [0m"
	cd $code_path/$project_name && mvn test
	if [  $? -ne 0 ];then
				echo -e "[31m ==单元测试失败,需查项目$project_name,分支$branch_name,src/test/java下的单测用例== [0m"
	fi
}

function sonar_scanner_code(){
	echo -e "[34m 
==开始质量分析$project_name项目,$branch_name分支代码== [0m"
	cd $code_path/$project_name && sonar-scanner
	if [  $? -ne 0 ];then
				echo -e "[31m ==质量分析失败,需查项目$project_name,分支$branch_name,sonar配置文件sonar-project.properties== [0m"
	fi
}

function maven_pack_code(){
	echo -e "[34m ==开始对$branch_name代码打包== [0m"
	cd $code_path/$project_name && mvn clean install -Dmaven.test.skip=true
	if [  $? -eq 1 ];then
                echo -e "[31m ==打包失败,需查项目$project_name,分支$branch_name代码== [0m"
                exit 0
        fi
}

function remote_deploy_code(){
	envip=`find /root -name env_info.json | xargs cat | jq -r '.'$project_name'.'$env''`
        arrayIp=`echo $envip | tr ',' ' '`

        for ip in ${arrayIp[@]}
        do
	{
	     echo -e "[34m ==开始对$env环境$ip机器部署== [0m"

	     ssh root@$ip "source /etc/profile && rm -rf $tomcat_path/webapps/$project_name* && sh $tomcat_path/bin/shutdown.sh >/dev/null 2>&1"
	     if [  $? -eq 1 ];then
                echo -e "[31m ==部署失败,jenkins连$ip失败或关闭tomcat服务失败== [0m"
                exit 0
             fi	     

	     scp $code_path/$project_name/target/$project_name.war root@$ip:$tomcat_path/webapps/
	     if [  $? -eq 1 ];then
                echo -e "[31m ==部署失败,jenkins连$ip失败或推送$project_name.war失败== [0m"
                exit 0
             fi	     
	     
	     ssh root@$ip "source /etc/profile && sh $tomcat_path/bin/startup.sh"
	     if [  $? -eq 1 ];then
                echo -e "[31m ==$project_name项目在$ip机器上部署失败== [0m"
                exit 0
             fi
	     echo -e "[34m ==$project_name项目在$ip机器上部署成功== [0m"
	}&
	done
	wait
}

git_pull_code
unit_testing
sonar_scanner_code
maven_pack_code
remote_deploy_code

字体颜色

格式:
echo -e "[字体颜色  字符串[0m"
[30m   --   [37m   设置字体颜色 
[0m  关闭所有属性

案例:
echo -e "[30m 黑色字 [0m" 
echo -e "[31m 红色字 [0m" 
echo -e "[32m 绿色字 [0m"
echo -e "[33m 黄色字 [0m"
echo -e "[34m 蓝色字 [0m"
echo -e "[35m 紫色字 [0m" 
echo -e "[36m 天蓝字 [0m" 
echo -e "[37m 白色字 [0m"

代码工程项目下增加sonar-project.properties配置文件

sonar-project.properties

#项目主键需唯一
sonar.projectKey=youceedu:spring

#项目名和版本
sonar.projectName=spring
sonar.projectVersion=1.0

#被测代码目录
sonar.sources=src/main/java
sonar.java.binaries=target/classes

#项目开发语言及编码
sonar.language=java
sonar.sourceEncoding=UTF-8

sonarQube最终效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值