Jenkins集成SonarQube进行代码质量审查
前言
在追求快速交付的现代软件开发中,持续集成/持续交付(CI/CD) 是基石,而 Jenkins 作为其核心引擎,极大地提升了自动化构建和部署的效率。然而,速度不能以牺牲质量为代价。
SonarQube 作为领先的静态代码分析平台,能自动检测代码缺陷、安全漏洞和坏味道,是保障代码质量的利器。将 SonarQube 集成到 Jenkins 流水线中,可以在代码构建后立即自动进行深度质量扫描,实现:
- 质量左移: 提前发现并修复问题,降低后期成本。
- 自动化质量门禁: 只有通过质量阈值的代码才能进入后续流程。
- 即时反馈: 开发者快速获取本次提交的质量报告。
本文旨在清晰阐述 Jenkins 集成 SonarQube 的简单实践,帮助您在自动化流水线中无缝嵌入代码质量管控,实现高效与高质的软件交付。
1. 创建sonar目录
$ mkdir -p /data/sonar
$ cd /data/sonar
$ echo "vm.max_map_count=262144" >> /etc/sysctl.conf
$ sysctl -p
2. 编写Docker-conpose文件
$ vim docker-compose.yaml
version: '3'
services:
sonarqube:
image: sonarqube:lts-community
ports:
- '9000:9000'
environment:
SONAR_JDBC_URL: 'jdbc:postgresql://db:5432/sonardb'
SONAR_JDBC_USERNAME: 'sonar'
SONAR_JDBC_PASSWORD: 'sonar_password'
restart: always
volumes:
- ./sonarqube/logs:/opt/sonarqube/logs
- ./sonarqube/conf:/opt/sonarqube/conf
- ./sonarqube/data:/opt/sonarqube/data
- ./sonarqube/extensions:/opt/sonarqube/extensions
db:
image: postgres:latest
environment:
POSTGRES_USER: 'sonar'
POSTGRES_PASSWORD: 'sonar_password'
POSTGRES_DB: 'sonardb'
restart: always
volumes:
- ./postgres/postgresql:/var/lib/postgresql
- ./postgres/data:/var/lib/postgresql/data
- /etc/localtime:/etc/localtime:ro
3. 创建容器
$ docker-compose up -d
4. 目录授权
授权目录后重启容器
$ chmod 777 -R sonarqube
$ docker-compose restart
5. 创建用户密钥
SonarQube地址:http://IP:9000
默认账号:admin
默认密码:admin
My Account
--> Security
--> Generate Tokens
--> Generate
,保存生成的用户token
6. 扫描测试
6.1 安装sonar-scanner-cli
- 下载 sonar-scanner-cli
$ wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.8.1.3023-linux.zip
$ unzip sonar-scanner-cli-4.8.1.3023-linux.zip
$ mv sonar-scanner-cli-4.8.1.3023-linux /usr/local/sonar-scanner-4.8.1.3023-linux
- 配置环境变量
$ vim /etc/profile
# sonar-scanner
export SONARRUNNER_HOME=/usr/local/sonar-scanner-4.8.1.3023-linux
export PATH=$SONARRUNNER_HOME/bin:$PATH
- 生效配置
$ source /etc/profile
6.2 拉一个java测试项目代码
$ git clone https://github.com/hzbb2221/springboot-helloworld.git
$ cd springboot-helloworld
$ mvn clean install
6.3 代码质量扫描
$ sonar-scanner \
-Dsonar.projectKey=springboot-helloworld \
-Dsonar.sources=. \
-Dsonar.host.url=http://192.168.253.146:9000 \
-Dsonar.login=sqa_9274d90b5e4fb4135d09e5724d2d5d1f9f66b424 \
-Dsonar.java.binaries=./target/classes
参数说明
-
sonar.projectKey: 项目名称
-
sonar.sources:项目文件目录(当前目录)
-
sonar.host.url:sonarqube地址
-
sonar.login:登录token,可使用项目token或者用户token
-
sonar.java.binaries:指定Java项目编译后的
.class
文件目录(仅Java需要) -
集成到Jenkin CI中时,可增加以下两个参数:
- sonar.qualitygate.wait:启用质量限制,禁止不满足规则的代码通过
- sonar.qualitygate.timeout:超时配置,防止无限等待
6.4 代码质量阈值
6.5 查看扫描报告
7. Jenkins pipeline 集成
代码质量审查也可以集成进Maven中,但在实际项目中除java外还存在前端及其他语言的代码,所以这里统一用客户端扫描了。
pipeline {
agent any
stages {
stage("1. 拉取代码") {
...
}
stage("2. 编译应用") {
...
}
stage("3. 代码审查") {
steps {
sh """
sonar-scanner \
-Dsonar.projectKey=$JOB_NAME \
-Dsonar.sources=. \
-Dsonar.host.url=http://192.168.253.146:9000 \
-Dsonar.login=sqa_9274d90b5e4fb4135d09e5724d2d5d1f9f66b424 \
-Dsonar.java.binaries=./target/classes \
-Dsonar.qualitygate.wait=true \
-Dsonar.qualitygate.timeout=300
"""
}
}
stage("4. 构建镜像") {
...
}
stage("5. 上传镜像") {
...
}
stage("6. 更新应用") {
...
}
}
}
- 执行 Build
8. 查看代码审查报告
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
运维小记!
喜欢就支持一下吧
打赏
微信
支付宝