在DevOps理念中,CI/CD毫无疑问是最重要的一环,而代码质量检查则是CI中必不可少的一步。在敏捷开发的思想下,代码的迭代周期变短,交付速度提升,这个时候代码的质量就很难保证。
测试只能保证功能完整与可用,而代码的质量纯靠review的话效率又很低,这个时候SonarQube就可以很好的帮助开发自动化检测代码质量,降低bug数量,也可以根据扫描结果养成良好的编程习惯,同时也可以减少测试的工作量,真正提升整个团队效率,实现DevOps理念。
在上周六与本周三的复习课程中,芒果就带大家学习了怎么使用SonarQube来做Python项目的代码扫描工作,以及怎么使用Jenkins和SonarQube集成,这里我们做个小总结。
SonarQube介绍
Sonar(SonarQube)是一个开源平台,用于管理源代码的质量,它不仅是一个质量数据报告工具,更是代码质量管理平台。它通过插件的形式来管理代码,它支持的语言包括:Java,Python,PHP,C#,C,JS等。
SonarQube的由以下四部分组成:
一个SonarQube Server
一个SonarQube Database
不同种类的SonarQube Plugins
一个或者多个SonarScanners
在持续集成中,sonar主要通过以下方式进行集成:
SonarQube的安装与配置
Sonarqube的安装比较简单,由于最新的7.9版本必须使用11以以上版本的JDK,所以我们这里使用7.7或者7.8版本。
Sonarqube的下载与安装:
代码语言:javascript复制#下载地址:
https://www.sonarqube.org/downloads/
#解压:
unzip sonarqube-7.7.zip
#启动:
windows:.sonarqubebinwindows-x86-64StartSonar.bat
其他平台:sonarqube/bin/linux-x86-64/sonar.sh console
#访问:
http://127.0.0.1:9000
#登录(默认管理用户用户名、密码):
admin/admin
Sonarqube的配置:
代码语言:javascript复制#新建sonar用户(sonar使用root用户启动会失败):
useradd sonar
passwd sonar
chown -R sonar.sonar sonarqube/
su sonar
#创建sonar数据库:
CREATE DATABASE sonar DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON sonar.* TO 'root'@'%';
FLUSH PRIVILEGES;
#配置sonar server(vi conf/sonar.properties ):
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.sorceEncoding=UTF-8
#配置sonar wrapper(vi conf/wrapper.conf):
wrapper.java.command=/usr/java/jdk1.8.0_172/bin/java
Sonar Scanner作为安装在构建或者持续集成服务器上的扫描工具,通过扫描代码,上传扫描结果给Sonar Server 以显示结果。
Sonar Scanner安装:
代码语言:javascript复制#下载地址:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
#配置sonar-scanner(vi conf/sonar-scanner.properties):
sonar.host.url=http://localhost:9000
sonar.sourceEncoding=UTF-8
#将sonar scanner添加到环境变量(vi /etc/profile ):
export SONAR-SCANNER_HOME=/usr/sonar-scanner
export PATH=$ SONAR-SCANNER_HOME /bin:$PATH
#更新环境变量:
source /etc/profile
安装好Sonar Scanner就可以在该主机上进行对应项目的静态扫描工作。要想列出已经下载下来的镜像,可以使用 docker image ls 命令。
Jenkins与SonarQube的持续集成
通过Jenkins使用的Sonar Scanner插件可以构建自动化的项目代码扫描计划,并将扫描结果反馈给Sonar Server。
在安装好Sonar Scanner插件之后需要在Jenkins中添加Sonar Server相关配置:
并对构建服务器上Scanner进行配置:
接下来就可以在构建与部署任务之前添加一个扫描任务了:
手工构建或者等待构建触发器出发构建,就可以完成整个代码扫描任务。
当然Sonar的使用不仅仅如此简单,比如我们可以去添加自定义的扫描规则,因为篇幅原因,我们仅仅介绍以上部分,对于更多的内容,我们会在之后的文章进行更新。