
代码质量与静态分析平台,具备质量门禁、多语言扫描以及以安全为核心的规则,可在CI/CD工作流中检测漏洞和可维护性问题。
SonarQube 是用于代码质量和安全的算法验证平台。其静态分析应用符号执行、数据流与控制流分析等技术来检查你的代码,发现缺陷、漏洞和结构性问题,并准确告诉你需要修复什么以及为什么,无论是在你的 IDE、拉取请求还是 CI 流水线中。
本仓库包含 SonarQube Community Build 的源代码,这是 SonarQube 平台的免费开源版本。它与整个 SonarQube 产品线共享相同的分析能力。
AI 编写代码的速度超过了团队审查代码的速度,从而产生了验证债务:代码在任何人确认其功能之前就已进入生产环境。SonarQube 对每一行代码应用同样一致、可解释的分析,无论代码是由开发者还是智能体编写的。先随性生成,再验证:快速生成,然后验证进入生产环境的内容。它是智能体中心开发周期(Agent Centric Development Cycle)中的验证阶段,运行在外部 CI 验证循环中,在代码合并前对其进行验证。
SonarQube 平台可分析 40 多种编程语言和框架;Community Build 支持其中的一部分。分析是可重复、可审计且可解释的:相同的代码始终产生相同的结果,每个结果都可追溯,并且每个结果都会告诉你问题是什么以及为什么重要。
SonarQube Server 和 SonarQube Cloud 包含 Community Build 中的所有功能,并增加了:
检测更多问题
分析你的整个工作流程
治理、报告并跨团队查看
修复
部分功能属于 SonarQube Advanced Security 附加组件。详情请参阅产品线。
质量门是对新代码的通过或失败检查。只需设置一次标准,SonarQube 就会在每个拉取请求和流水线中自动强制执行,从而在问题合并前将其捕获,而不是在生产环境中才发现。
Community Build 是免费且开源的。更广泛的 SonarQube 产品线在你的整个工作流程中应用相同的分析:
比较 SonarQube 计划和定价 以选择合适的产品和部署模式。
Community Build 是免费的吗? 是的。它是免费且开源的,本仓库就是其源代码。
Community Build 和 SonarQube Server 有什么区别? Community Build 是免费的自管理引擎。SonarQube Server 和 SonarQube Cloud 是商业版本。它们覆盖更多语言,并增加了分支和拉取请求分析、软件组成分析(SCA)、架构管理、带污点分析(SAST)的高级安全功能、机密检测、基础设施即代码(IaC)分析、用于生成经过验证的修复拉取请求的 SonarQube Remediation Agent,以及企业报告。部分功能属于 SonarQube Advanced Security 附加组件。详情请参阅产品线。
它适用于 AI 生成的代码吗? 是的。SonarQube 对所有代码应用相同的分析,无论代码是由开发者还是智能体编写的。
对于支持问题(“我该怎么做?”、“我遇到了这个错误,为什么?”……),请先阅读文档,然后前往 SonarSource 社区。你的问题很可能已经有人回答过了!🤓
请注意,该论坛是一个社区,因此请使用标准的礼貌用语(“你好”、“谢谢”……)。如果你在帖子中没有得到答复,你应该耐心等待至少三天再顶帖。客服人员并非随时待命。😄
如果你想看到新功能或报告缺陷,请在我们的论坛中创建一个新帖子。
请注意,我们并不积极寻求功能贡献。事实是,SonarSource 之外的人很难符合我们的路线图和期望。因此,我们通常只接受细微的外观更改和拼写错误修复。
话虽如此,如果你想提交代码贡献,请为本仓库创建一个拉取请求。请解释你贡献此更改的动机:你试图修复什么问题,你试图做出什么改进。
确保你遵循我们的代码风格,并且所有测试都通过(每个拉取请求都会执行 GitHub Actions 构建)。
愿意为 SonarSource 产品做贡献吗?我们正在寻找聪明、充满热情且技术娴熟的人才,帮助我们构建世界一流的代码质量解决方案。请查看我们当前的职位空缺!
要在本地构建源代码,请遵循以下说明。
-x test 来禁用(如果你只想构建而不运行测试,这很有用)从项目根目录执行:
./gradlew build
zip 分发包生成在 sonar-application/build/distributions/ 中。解压它并通过执行以下命令启动服务器:
# on Linux
bin/linux-x86-64/sonar.sh start
# or on MacOS
bin/macosx-universal-64/sonar.sh start
# or on Windows
bin\windows-x86-64\StartSonar.bat
如果项目从未构建过,则按常规方式构建它(参见上一节),或使用更快的命令:
./gradlew ide
然后在 IntelliJ 或 Eclipse 中将根文件 build.gradle 作为项目打开。
| ./gradlew command | Description |
|---|---|
dependencies | list dependencies |
spotlessApply | fix source headers by applying HEADER |
wrapper --gradle-version <version> | upgrade wrapper |
SonarQube UI(或我们所说的 webapp)位于另一个仓库:sonarqube-webapp。
在构建 sonarqube 仓库时,webapp 会作为依赖项自动从 Maven Central 下载,这使你无需关心 webapp 即可轻松贡献后端更改。
但如果你的贡献还包含 UI 更改,则必须克隆 sonarqube-webapp 仓库,在那里进行更改,在本地构建它,然后使用 WEBAPP_BUILD_PATH 环境变量指向你的自定义 UI 构建来构建 sonarqube 仓库。
以下是一个示例:
cd /path/to/sonarqube-webapp/server/sonar-web
# do your changes
# install dependencies, only needed the first time
yarn
# build the webapp
yarn build
cd /path/to/sonarqube
# build the sonarqube repository using the custom build of the webapp
WEBAPP_BUILD_PATH=/path/to/sonarqube-webapp/server/sonar-web/build/webapp ./gradlew build
你也可以通过更新 ./gradle.properties 文件中的 webappVersion 属性来指定特定版本的 webapp,然后正常构建 sonarqube 仓库。
历史上,我们的翻译存储在 sonar-core/src/main/resources/org/sonar/l10n/core.properties 中,但该文件现已弃用且不再更新。
默认翻译(英文)现在定义在 webapp 仓库中,位置如下:
https://github.com/SonarSource/sonarqube-webapp/blob/master/libs/sq-server-shared/src/l10n/default.ts
格式已更改,但你仍然可以通过运行以下命令将其作为 .properties 文件格式获取:
cd /path/to/sonarqube-webapp/server/sonar-web
# install dependencies, only needed the first time
yarn
# generate a backward compatible .properties file with all the translation keys
yarn generate-translation-keys
请注意,为其他语言翻译贡献扩展的工作方式仍与以前相同。只是默认翻译的权威来源发生了变化。
Copyright (C) SonarSource Sàrl.