1.sonarqube介绍
在DevOps理念中,CI/CD毫无疑问是最重要的一环,而代码质量检查则是CI中必不可少的一步。在敏捷开发的思想下,代码的迭代周期变短,交付速度提升,这个时候代码的质量就很难保证。
测试只能保证功能完整与可用,而代码的质量纯靠review的话效率又很低,这个时候SonarQube就可以很好的帮助开发自动化检测代码质量,降低bug数量,也可以根据扫描结果养成良好的编程习惯,同时也可以减少测试的工作量,真正提升整个团队效率,实现DevOps理念。
Sonar(SonarQube)是一个开源平台,用于管理源代码的质量,它不仅是一个质量数据报告工具,更是代码质量管理平台。它通过插件的形式来管理代码,它支持的语言包括:Java,Python,PHP,C#,C,JS等。
SonarQube的由以下四部分组成:
一个SonarQube Server
一个SonarQube Database
不同种类的SonarQube Plugins
一个或者多个SonarScanners
在持续集成中,sonar主要通过以下方式进行集成:
为了简单高效地部署及管理sonar,决定采用docker-compose版本进行部署。亲测无坑,因为坑以及被我踩完了!!!
2.sonarqube的安装与配置
2.1.postgresql
首先需要安装数据库,开源的可以用 mysql 或者 postgresql 。官网上已经声明 sonarQube 7.9 版本以上不再支持 mysql 了,我们为了以后升级新版本不做数据库迁移,尽量使用 postgresql
mkdir -p /data/sonar/postgres/postgresql mkdir -p /data/sonar/postgres/data mkdir -p /data/sonar/sonarqube chmod 777 -R /data/sonar/sonarqube echo "vm.max_map_count=262144" > /etc/sysctl.conf sysctl -p
然后我们利用docker-compose部署sonarqube,docker以及docker-compose的部署方式自行百度
2.2. sonar-compose.yml 文件
vim /data/sonar/sonar-compose.yml version: '3' services: postgres: image: postgres:latest container_name: postgres restart: always privileged: true networks: - sonar volumes: - /data/sonar/postgres/postgresql:/var/lib/postgresql - /data/sonar/postgres/data:/var/lib/postgresql/data - /etc/localtime:/etc/localtime:ro ports: - "5432:5432" environment: POSTGRES_USER: sonar POSTGRES_PASSWORD: sonar POSTGRES_DB: sonar TZ: Asia/Shanghai sonar: image: sonarqube:8.9.10-community container_name: sonar restart: always privileged: true networks: - sonar volumes: - /data/sonar/sonarqube/logs:/opt/sonarqube/logs - /data/sonar/sonarqube/conf:/opt/sonarqube/conf - /data/sonar/sonarqube/data:/opt/sonarqube/data - /data/sonar/sonarqube/extensions:/opt/sonarqube/extensions ports: - "9090:9000" links: - "postgres:postgres" environment: ALLOW_EMPTY_PASSWORD: "yes" SONARQUBE_JDBC_USERNAME: sonar SONARQUBE_JDBC_PASSWORD: sonar SONARQUBE_JDBC_URL: "jdbc:postgresql://postgres:5432/sonar" networks: sonar: driver: bridge
移动到/data/sonar 运行docker-compose文件
docker-compose -f sonar-compose.yml up -d
检查docker容器状态,这边我是将sonarqube的端口映射到9090
docker ps -a
2.3. 安装中文插件
登录sonarqube客户端,访问http://192.168.5.109:9090
初始账户密码都是admin admin,第一次登录需要修改登录密码
由于找不到7.4版本,所以我们选择离线安装
cd sonarqube/extensions/downloads/ wget https://github.com/xuhuisheng/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.24/sonar-l10n-zh-plugin-1.24.jar docker restart sonar
重新启动之后即可显示中文界面
生成完了之后将令牌保存下来 ,后面会用到
3.jenkins集成sonarqube
3.1.登录jenkins客户端
Jenkins 我直接使用迷你主机的jenkins ,具体的安装步骤以及触发器 可以看我之前那些的jenkins相关的文档
登录jenkins的web页面,这里我已licloud-admin项目为例 当然后续也可以新建项目、
当然 在此之前 我们需要先下载sonar的插件,以及系统配置,和全局工具配置
3.2. 下载插件
搜索sonar,下载soanrqube scanner for jenkins ,这里我已经提前安装好了
3.3.系统配置
找到soanrqube servers
全局凭据,将我们之前保存的sonar令牌 复制粘贴到secret,保存即可
3.4.全局工具配置
找到sonar安装,自动安装选择相应的版本,保存退出,到这里我们所有的全局变量就配置好了
4.Jenkins+SonarQube实现Python项目静态扫描
这里我们开始创建项目实现python代码的静态扫描,这里我以licloud-admin项目为例
添加构建后步骤
其中: sonar.projectKey,sonar.projectName(项目名称,可在项目工程的pom.xml中找) sonar.projectVersion是版本(pom.xml中的版本信息) sonar.sources是需要sonar分析的项目工程中的文件路径
保存退出
点击立即构建 构建成功 这个时候我们可以去sonar的web页面查看一下记录
代码已经扫描完成
可以通过点击问题 查看 具体的一些详细信息