代码扫描:sonarqubes+SonarScanner CLI的应用
本章介绍sonarqubes+SonarScanner CLI的应用,需要先安装对应产品,详见前一篇文章代码扫描:sonarqubes+SonarScanner CLI安装部署
一、创建工程
通过http://192.168.1.*:9900进入sonarqubes。
点击Projects>Create Project,显示如下界面.
1.1创建本地工程

输入工程名称,其他采用默认,点击Next。
1. Project display name(项目显示名称)
含义:这是项目在用户界面上显示的名称,用于人类可读的标识。
2. Project key(项目密钥)
项目密钥是您项目的唯一标识符,最多可包含400个字符。允许使用字符包括字母数字、'-'(短横线)、'_'(下划线)、'.'(句点)和':'(冒号),其中至少需包含一个非数字字符。
默认和Project display name一样
3. Main branch name(主分支名称)
含义:指定该项目的默认主分支名称。这是代码库中的主要开发分支,通常是稳定版本的来源。
默认值:main(当前已填写)
1.2设置新代码

选择第一个“Follows the instance's default”,在点击“Create Projet”。
1. Follows the instance's default
(遵循实例的默认设置)
当前默认值:Previous version(前一个版本)
含义:使用平台全局设定的“新代码”标准。
适用场景:如果你希望保持与组织统一的标准,无需额外配置。
2. Is custom
(自定义设置)
功能:允许你选择以下三种方式之一来定义“新代码”:
Previous version:以最近一次发布/构建的版本为基准,之后提交的代码视为“新代码”。
A number of days:指定多少天内的代码为“新代码”(例如:过去30天内修改的代码)。
A reference branch:以某个特定分支(如 main、develop)作为基准,该分支之外的变更被视为“新代码”。
1.3代码分析方法

点击“Locally”,进入下一步设置
| 选项 | 图标 | 说明 |
|---|---|---|
| With Jenkins | 🐙 | 使用 Jenkins 作为持续集成工具进行代码分析。 适用于使用 Jenkins 构建流水线的团队。 |
| With GitHub Actions | 🐱💻 | 使用 GitHub Actions 自动触发代码分析。 适合托管在 GitHub 上的项目,自动化程度高。 |
| With Bitbucket Pipelines | 🟦 | 使用 Bitbucket 的内置 CI 工具(Pipelines)进行分析。 适合使用 Atlassian 生态(如 Bitbucket + Jira)的团队。 |
| With GitLab CI | 🦊 | 使用 GitLab 的 CI/CD 功能执行分析。 适用于 GitLab 托管的仓库。 |
| With Azure Pipelines | 💼 | 使用 Microsoft Azure DevOps 的 CI 管道进行分析。 适合使用 Azure 生态的企业。 |
| Other CI | — | 如果你使用的是其他 CI 工具(如 CircleCI、Travis CI、TeamCity 等),可以选择此项。 它会引导你手动配置分析命令或使用通用的 Sonar Scanner 工具。 |
| Locally | — | 在本地机器上运行分析。 仅建议用于测试、调试或高级用例(例如学习、临时检查)。 不推荐用于生产环境或团队协作场景。 |
注意事项:
选择后通常会跳转到对应的配置向导,生成所需的脚本、令牌(Token)、配置文件(如 sonar-project.properties 或 .sonarcloud.properties)等。
大多数现代 CI 工具都支持与 SonarQube/SonarCloud 的无缝集成,推荐优先使用官方支持的方式。
“Locally” 虽然方便快速测试,但无法实现自动化质量门禁(Quality Gate),不适合团队协作。
1.4生成token

| 字段 | 说明 |
|---|---|
| Token name* | 为该令牌命名,便于识别。 例如: Analyze "dms_report_server"这只是一个标签,不影响功能。 |
| Expires in | 设置令牌的有效期。 可选:30 天、90 天、1 年、永不过期(Never) ⚠️ 建议不要设为“永不过期”,除非你确定长期使用且能管理好安全性。 |
| Generate | 点击后生成一个唯一的随机字符串(即令牌)。 请务必复制并保存,因为之后无法再查看! |

注:将这个token拷贝到记事本中,后面会用到。
2.创建sonar-project.properties
在对应工程下创建sonar-project.properties文件
2.1.java工程
java工程的配置内容,如下:
sonar.projectKey=dms_java_server
sonar.projectName=Java工程
sonar.host.url=http://192.168.1.204:9900
# 源码路径(假设是 Maven 项目)
sonar.sources=src/main/java
sonar.tests=src/test/java
# 二进制文件路径(用于覆盖率等)
sonar.java.binaries=target/classes
sonar.java.test.binaries=target/test-classes
# 文件过滤
sonar.inclusions=**/*.java
sonar.exclusions=**/target/**
2.2 vue工程
配置内容,如下:
sonar.projectKey=jtyh
sonar.projectName=前端工程
sonar.sources=src
sonar.inclusions=**/*.js,**/*.ts,**/*.vue
sonar.exclusions=**/node_modules/**,**/dist/**
sonar.javascript.vue.enabled=true
sonar.host.url=http://192.168.1.204:9900
3.开始代码扫描
进入工程路径,如E:\project\dms_java_server

3.1执行
sonar-scanner -Dsonar.scanner.skipJreProvisioning=true -Dsonar.token=sqp_eb97f6ae23818171e54b2c5f3987991a08e8384d

3.2测试结果

| 指标 | 值 | 等级 | 含义 |
| Security | 0 Open issues | ✅ A | 安全性良好 |
| Reliability | 442 Open issues | ❌ E | 可靠性极差 |
| Maintainability | 2.7k Open issues | ✅ A | 可维护性优秀 |
| Coverage | 0.0% | �� ⚠️ | 测试覆盖缺失 |
| Duplications | 28.3% | �� ⚠️ | 重复代码严重 |
| Security Hotspots | 8 | ❌ E | 存在潜在安全风险点 |
更多推荐


所有评论(0)