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
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" } } } }
标签:scanner,sonarqube,代码,apps,Dsonar,案例,sonar,root From: https://www.cnblogs.com/gengxiaonuo/p/16927843.html