SonarQube介绍

1、SonarQube 是一个用于代码质量管理的开放平台,通过插件机制实现对不同语言的源代码质量扫描,如go、python、java、python等代码扫描并生成扫描报告,官方网站:http://www.sonarqube.org。
2、下载地址:https://www.sonarqube.org/downloads
3、支持25种以上的常见编程语言,如java、pyhton、go、c、JavaScript等。
4、插件化,便于后期功能扩展。
5、可视化展示代码分析结果。
 

SonarQube代码扫描流程:

 
 

环境依赖

软件依赖:

1、https://docs.sonarqube.org/8.9/requirements/requirements/
2、7.9.x 版本开始不再支持MySQL
3、不能使用root用户启动SonarQube 

硬件依赖:

1、https://docs.sonarqube.org/8.9/requirements/hardware-recommendations/ 
2、CPU、内存、磁盘、网卡、数据库
 
 
本文PostgreSQL和SonarQube都在一台服务器上部署

部署PostgreSQL 14.x:   

PostgreSQL安装:

 

PostgreSQL安装:

 

sudo apt update
apt-cache madison postgresql
apt install postgresql 
 

PostgreSQL环境初始化

1、sudo pg_createcluster –start 12 mycluster #指定版本为PostgreSQL 12
2、vim /etc/postgresql/14/mycluster/pg_hba.conf

如果PostgreSQL单独一个服务器,则上面127.0.0.1/32 需要修改成 0.0.0.0/0

3、vim /etc/postgresql/14/mycluster/postgresql.conf
60行 打开  listen_addresses = localhost   
同样如果PostgreSQL单独一个服务器,则改成listen_addresses = ‘*’

PostgreSQL端口验证

systemctl restart postgresql  重启

lsof -i:5432   
 

创建数据库及账户授权

su - postgres #切换到postgres普通用户
psql -U postgres #进入到postgresql命令行敞口
CREATE DATABASE sonar; #创建sonar数据库 
CREATE USER sonar WITH ENCRYPTED PASSWORD '123456'; #创建sonar用户密码为123456
GRANT ALL PRIVILEGES ON DATABASE sonar TO sonar; #授权用户访
ALTER DATABASE sonar OWNER TO sonar; #执行变更
\q #退出
exit

 

 

部署SonarQube Server 8.9.x:

安装jdk 11:

apt install -y openjdk-11-jdk

内核参数:

vim /etc/sysctl.conf 

    vm.max_map_count = 524288
    fs.file-max = 131072

vim /etc/security/limits.conf 
root                soft    core            unlimited
root                hard    core            unlimited
root                soft    nproc           1000000
root                hard    nproc           1000000
root                soft    nofile          1000000
root                hard    nofile          1000000
root                soft    memlock         32000
root                hard    memlock         32000
root                soft    msgqueue        8192000
root                hard    msgqueue        8192000

*                soft    core            unlimited
*                hard    core            unlimited
*                soft    nproc           1000000
*                hard    nproc           1000000
*                soft    nofile          1000000
*                hard    nofile          1000000
*                soft    memlock         32000
*                hard    memlock         32000
*                soft    msgqueue        8192000
*                hard    msgqueue        8192000

 

部署SonarQube 8.9.x:

mkdir /apps && cd /apps/   上传sonarqube二进制文件
unzip sonarqube-8.9.10.61524.zip 
ln -sv /apps/sonarqube-8.9.10.61524 /apps/sonarqube
useradd -r -m -s /bin/bash sonarqube && chown sonarqube.sonarqube /apps/ -R && su – sonarqube
vim /apps/sonarqube/conf/sonar.properties
   18 sonar.jdbc.username=sonar
   19 sonar.jdbc.password=123456
    37 sonar.jdbc.url=jdbc:postgresql://localhost/sonar  注:如果postgresql不在本机,需要localhost需要填写postgresql所在服务器的ip
/apps/sonarqube/bin/linux-x86-64/sonar.sh start
 

验证SonarQube:

tail /apps/sonarqube/logs/*.log 

lsof -i:9000

 

访问web界面:

默认账户: admin
默认密码:admin #首次登录需要修改密码

 

 

插件管理

Administration–> Marketplace–> I understand the risk(首次需要点击我理解风险)–>all
Administration–> System–> Restart Server #新插件安装成功后需要重启SonarQube server
 

 

 

认证管理:

配置–> 权限–> Force user authentication

 

 

service 文件:

# cat /etc/systemd/system/sonarqube.service 
[Unit] 
Description=SonarQube service 
After=syslog.target network.target 
[Service] 
Type=simple 
User=sonarqube 
Group=sonarqube 
PermissionsStartOnly=true
ExecStart=/bin/nohup /usr/bin/java -Xms1024m -Xmx1024m -Djava.net.preferIPv4Stack=true -jar /apps/sonarqube/lib/sonar-application-8.9.10.61524.jar
StandardOutput=syslog 
LimitNOFILE=131072 
LimitNPROC=8192 
TimeoutStartSec=5 
Restart=always 
SuccessExitStatus=143 
[Install] 
WantedBy=multi-user.target

 

systemctl daemon-reload

systemctl start sonarqube.service

systemctl enable sonarqube.service

 

部署扫描器sonar-scanner: 

1、sonar-scanner会访问指定的SonarQube Server,以下载执行代码质量扫描的时候所需要的分析器、质量配置文件等资源,以实现代码分析和结果上传。
2、在jenkins或其它需要进行代码指令扫描的服务器部署sonar-scanner:
     下载地址:https://binaries.sonarsource.com/?prefix=Distribution/sonar-scanner-cli 
     官方文档:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner

选择在jenkins上部署

将下载好的sonar-scanner-cli-4.7.0.2747.zip 上传至/apps
unzip sonar-scanner-cli-4.7.0.2747.zip 
ln -sv /apps/sonar-scanner-4.7.0.2747 /apps/sonar-scanner
vim /apps/sonar-scanner/conf/sonar-scanner.properties

 

在sonar-scanne节点测试代码质量扫描: 

配置参数:

上传python-test文件:

cat sonar-project.properties

 

 

执行扫描:

基于配置文件执行扫描:
/apps/sonar-scanner/bin/sonar-scanner
最终将结果上传到SonarQube

 

基于传递扫描参数:

/apps/sonar-scanner/bin/sonar-scanner -Dsonar.projectKey=xiaonuo1 -Dsonar.projectName=xiaonuo1 -python-app1 -Dsonar.projectVersion=1.0 -Dsonar.sources=./src -Dsonar.language=py -Dsonar.sourceEncoding=UTF-8

 

 

 

 

 

 

扩展:基于jenkins shell实现代码克隆、测试代码质量

cd /root/data/gitdata/gxn
git clone git@10.247.8.36:gxn/app2.git
cd app2
/apps/sonar-scanner/bin/sonar-scanner

 

 

 

扩展:基于jenkins pipline实现代码克隆、测试代码质量

pipeline {
  agent any
  parameters {
    string(name: 'BRANCH', defaultValue:  'develop', description: '分支选择')   //字符串参数,会配置在jenkins的参数化构建过程中
    choice(name: 'DEPLOY_ENV', choices: ['develop', 'production'], description: '部署环境选择')  //选项参数,会配置在jenkins的参数化构建过程中
  }
  stages {
    stage('变量测试1') {
      steps {
        sh "echo $env.WORKSPACE"  //JOB的工作目录,可用于后期目录切换
        sh "echo $env.JOB_URL"  //JOB的URL
        sh "echo $env.NODE_NAME"  //节点名称,master 名称显示built-in
        sh "echo $env.NODE_LABELS" //节点标签
        sh "echo $env.JENKINS_URL"  //jenkins的URL地址
        sh "echo $env.JENKINS_HOME" //jenkins的家目录路径
      }
    }
    stage("code clone"){
            //#agent { label 'master' }  //具体执行的步骤节点,非必须
            steps {
                deleteDir() //删除workDir当前目录
                script {
                    if ( env.BRANCH == 'main' ) {
                        git credentialsId: '50c62603-00d5-4d48-8a53-8319c6eafeab', url: 'git@10.247.8.36:gxn/app2.git'
                    } else if ( env.BRANCH == 'develop' ) {
                        git credentialsId: '50c62603-00d5-4d48-8a53-8319c6eafeab', url: 'git@10.247.8.36:gxn/app2.git'
                    } else {
                        echo '您传递的分支参数BRANCH ERROR,请检查分支参数是否正确'
                    }
                    GIT_COMMIT_TAG = sh(returnStdout: true, script: 'git rev-parse --short HEAD').trim() //获取clone完成的分支tagId,用于做镜像做tag
                    }
                }
            } 

    stage('python源代码质量扫描') {
        steps {
            sh "cd $env.WORKSPACE && /apps/sonar-scanner/bin/sonar-scanner -Dsonar.projectKey=magedu -Dsonar.projectName=magedu-python-app3 -Dsonar.projectVersion=2.0  -Dsonar.sources=./src -Dsonar.language=py -Dsonar.sourceEncoding=UTF-8"
            }
        }
    }
}

 

 

 

 

 

 

 

 

 
 

 

原文地址:http://www.cnblogs.com/gengxiaonuo/p/16927843.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性