代码质量管理平台搭建

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.34C机器
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          65536ulimit -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://A机器ip:9000
sonar.sourceEncoding=UTF-8vim /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=$3function git_pull_code(){echo -e "\033[34m ==开始拉取$project_name项目,$branch_name分支代码== \033[0m"rm -rf $code_path && mkdir -p $code_path && cd $code_path  git initgit remote add origin git@$git_server:/home/git/repos/$project_name.gitgit pull origin $branch_name >/dev/null 2>&1if [  $? -eq 1 ];thenecho -e "\033[31m ==拉取失败,需查项目$project_name,分支$branch_name是否存在== \033[0m"exit 0fi   git log --pretty=format:"%h - %an, %ai : %s" -5
}function unit_testing(){echo -e "\033[34m \n==开始单元测试$project_name项目,$branch_name分支代码== \033[0m"cd $code_path/$project_name && mvn testif [  $? -ne 0 ];thenecho -e "\033[31m ==单元测试失败,需查项目$project_name,分支$branch_name,src/test/java下的单测用例== \033[0m"fi
}function sonar_scanner_code(){echo -e "\033[34m \n==开始质量分析$project_name项目,$branch_name分支代码== \033[0m"cd $code_path/$project_name && sonar-scannerif [  $? -ne 0 ];thenecho -e "\033[31m ==质量分析失败,需查项目$project_name,分支$branch_name,sonar配置文件sonar-project.properties== \033[0m"fi
}function maven_pack_code(){echo -e "\033[34m ==开始对$branch_name代码打包== \033[0m"cd $code_path/$project_name && mvn clean install -Dmaven.test.skip=trueif [  $? -eq 1 ];thenecho -e "\033[31m ==打包失败,需查项目$project_name,分支$branch_name代码== \033[0m"exit 0fi
}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 "\033[34m ==开始对$env环境$ip机器部署== \033[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 ];thenecho -e "\033[31m ==部署失败,jenkins连$ip失败或关闭tomcat服务失败== \033[0m"exit 0fi       scp $code_path/$project_name/target/$project_name.war root@$ip:$tomcat_path/webapps/if [  $? -eq 1 ];thenecho -e "\033[31m ==部署失败,jenkins连$ip失败或推送$project_name.war失败== \033[0m"exit 0fi         ssh root@$ip "source /etc/profile && sh $tomcat_path/bin/startup.sh"if [  $? -eq 1 ];thenecho -e "\033[31m ==$project_name项目在$ip机器上部署失败== \033[0m"exit 0fiecho -e "\033[34m ==$project_name项目在$ip机器上部署成功== \033[0m"}&donewait
}git_pull_code
unit_testing
sonar_scanner_code
maven_pack_code
remote_deploy_code

字体颜色

格式:
echo -e "\033[字体颜色  字符串\033[0m"
\033[30m   --   \033[37m   设置字体颜色
\033[0m  关闭所有属性案例:
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"

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

sonar-project.properties

#项目主键需唯一
sonar.projectKey=my: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最终效果

代码质量管理平台搭建相关推荐

  1. sonarqube+jenkins 构建代码质量管理平台

    本文基于已经构建好的jenkins自动化平台,添加sonarqube质量检测平台,本文主要展示sonar环境安装以及接入jenkins的操作(同一台机器) jenkins自动化平台搭建,请参考连接文章 ...

  2. 开发人员学Linux(10):CentOS7安装配置代码质量管理平台SonarQube6.4

    2019独角兽企业重金招聘Python工程师标准>>> 1.前言 上一章讲述了如何配置使用源代码管理工具SVN并使之与Apache集成,从而实现代码的变更可追溯,虽然在大多数团队里强 ...

  3. Jenkins+SonarQube6.5.5+SonarScanner2.5代码质量管理平台

    Jenkins+SonarQube6.5.5+SonarScanner2.5代码质量管理平台 简介 Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量.通过插件机制,Sonar ...

  4. Windows10 部署 Sonarqube 代码质量管理平台

    Windows10 部署 Sonarqube 代码质量管理平台 一 安装MySQL解压版 此部分参看Win10安装MySQL5.7.22 解压缩版(手动配置)方法 1.下载MySQL MySQL官网下 ...

  5. 开发人员学Linux(10):CentOS7安装配置代码质量管理平台SonarQube

    1.前言 上一章讲述了如何配置使用源代码管理工具SVN并使之与Apache集成,从而实现代码的变更可追溯,虽然在大多数团队里强调代码提交之前必须找团队中经验丰富的人来审核通过后方可提交,但这一条有时候 ...

  6. SonarQube代码质量管理平台安装与使用--转载

    原文:http://blog.csdn.net/hunterno4/article/details/11687269 Sonar简介 Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量, ...

  7. 持续集成与自动化部署 - jenkins sonar代码质量管理平台 部署和基础使用(五)...

    1 jenkins 安装参考链接 1.1 安装jenkins [root@test-node3 ~]# yum install -y java-1.8.0 [root@test-node3 ~]# c ...

  8. SonarQube代码质量管理平台安装与使用

    Sonar简介 Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量 通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaS ...

  9. 看这里,全网最详细的Sonar代码扫描平台搭建教程

    01 Sonar安装 官网:https://www.sonarqube.org/ 1.sonar简介 sonar是一款静态代码质量分析工具,支持Java.Python.PHP.JavaScript.C ...

最新文章

  1. 随便聊一些编程开发工具
  2. 找不到问题的核心,你永远解决不了问题。
  3. python treemap_使用TreeMap
  4. Audio strage 声音相关
  5. GitHub 2019年漏洞奖励计划最值得回顾的2个精彩 bug
  6. [转载] python匿名(lambda)函数
  7. oracle ctl 递增,增加oracle的控制文件
  8. 翻译:iOS上的MVVM + RxSwift架构对比 MVC,MVVM,MVP和VIPER
  9. ECAP等通道转角挤压详解
  10. 裁剪好的视频如何去除黑边?
  11. 嵌入式字符设备驱动——ULN2003步进电机驱动程序实现
  12. 响应式H5图片网盘外链系统源码 自适应PC手机端
  13. Excel图表制作(二):单选框和下拉菜单组合完成动态图
  14. CTO成长之路(一):优秀的程序员
  15. java lang arithmetic_java.lang.ArithmeticException: Rounding necessary
  16. LeetCode50——一题学会快速幂算法
  17. ExtJs 入门教程(我感觉挺好的)
  18. 如何在 Linux 中更新 Flatpak 软件包
  19. 如何制作一个简单的html网页
  20. 《抽样技术》第3章 分层随机抽样(st)

热门文章

  1. 最新 全球 ip地址 归属地 字典表 (202108)
  2. GitHub是什么?怎么用?Git是什么?怎么用?
  3. 中国剩余定理以及扩展中国剩余定理
  4. python numpy使用_Python NumPy使用
  5. 词向量系列之One-Hot编码详解
  6. Web安全 XXE漏洞的 测试和利用.(读取服务器的任何文件 和 收集服务器的内网信息.)
  7. HDU-6121 Build a tree - 2017 Multi-University Training Contest - Team 7(完全K叉树)
  8. grequests并发之小试牛刀
  9. 【读书笔记】《曾国藩的正面与侧面(一)》
  10. 关于ROS(Robot OS 机器人操作系统)