使用 SonarCloud 与 Travis CI
SonarCloud 是领先的在线服务,用于在您的拉取请求和整个代码存储库中捕获 Bug 和安全漏洞。SonarCloud 对开源项目完全免费(私有项目付费计划),与现有的基于云的 CI/CD 工作流程配对,并为其检测到的任何代码质量或安全问题提供清晰的解决指南。SonarCloud 已经分析了超过 10 亿行代码,使各种规模的开发团队能够编写更干净、更安全的代码,涵盖 20 多种编程语言。
有关更多详细信息,请参阅 SonarCloud 文档。
要求 #
如果构建环境中存在 Java JRE/JDK,则它必须至少为 Java 17。
构建环境中默认设置为 Java 11,添加
jdk: openjdk17
以将 Java 17 JRE/JDK 作为默认值。
使用 SonarQube 扫描仪检查代码 #
在检查代码之前,您需要
- 确保您的存储库在 Travis CI 上已正确激活。请参阅 Travis CI 教程。
- 在 SonarCloud 上为您的帐户 创建用户身份验证令牌。
- 加密此令牌
travis encrypt abcdef0123456789
或在 存储库设置 中定义SONAR_TOKEN
- 查找您要将项目推送到哪个 SonarCloud.io 组织 并获取其密钥
- 为您的项目创建一个
sonar-project.properties
文件(请参阅 文档)。
然后将以下行添加到您的 .travis.yml
文件中以触发分析
addons:
sonarcloud:
organization: "sonarcloud_organization_key" # the key of the org you chose at step #3
token:
secure: "*********" # encrypted value of your token
script:
# other script steps might be done before running the actual analysis
- sonar-scanner
请查看 实时示例项目 以了解有关此标准用例的更多信息。
用于 Maven 的 SonarQube 扫描仪 #
许多 Java 项目使用 Maven 构建。要将 SonarCloud 检查添加到您的 Maven 构建中,请将以下内容添加到您的 .travis.yml
文件中
addons:
sonarcloud:
organization: "sonarcloud_organization_key" # the key of the org you chose at step #3
token: "*********" # encrypted value of your token
script:
# the following command line builds the project, runs the tests with coverage and then execute the SonarCloud analysis
- mvn clean verify sonar:sonar -Pcoverage -Dsonar.projectKey=myorg_myrepo
请注意以下事项
- “coverage”配置文件(在您的 POM 文件中定义)激活 JaCoCo XML 报告的生成
- “sonar.projectKey”也可以在主 POM 文件中作为属性设置。其值可以在 SonarCloud 上项目主页右侧找到
请查看 基于 Maven 的实时示例项目 以了解有关此用例的更多信息。
如果没有 POM 更新,或者如果您正在 针对多个 JDK 进行测试(SonarCloud 分析应仅执行一次),或者需要多个步骤的 Maven 命令;在主构建结束时执行 JaCoCo XML 报告生成。脚本部分将如下所示
script:
- mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent package org.jacoco:jacoco-maven-plugin:report
- if [ "$JAVA_HOME" = "/usr/local/lib/jvm/openjdk11" ]; then mvn sonar:sonar; fi
内部拉取请求分析 #
SonarCloud 可以检查存储库的内部拉取请求并在发现问题的每一行上编写注释。
出于安全原因,此高级功能仅适用于**内部**拉取请求。换句话说,从 fork 构建的拉取请求不会被检查。
要在拉取请求上激活分析,您需要在您的 GitHub 组织上 安装 SonarCloud 应用程序。
请注意,如果您在 GitHub 应用程序之前使用过 SonarCloud,因此在您的项目上配置了 GitHub 令牌,则现在应从项目的“管理 > 常规设置 > 拉取请求”页面删除这些令牌。
即将推出的改进 #
此加载项的未来版本将提供以下功能
- 支持外部拉取请求。
访问完整 SCM 历史记录 #
Travis CI 使用 浅克隆 来加快构建时间,但截断的 SCM 历史记录可能会在 SonarCloud 计算责任数据时导致问题。为避免这种情况,您可以使用以下方法访问完整的 SCM 历史记录
git:
depth: false
已弃用的功能 #
如果您是 SonarCloud 的长期用户,则您的 .travis.yml
文件中可能包含以下条目
- “分支”
- “github_token”
如果是这种情况,您将在日志中收到警告,告知您此行为将很快被删除。您应该删除 .travis.yml
文件中的这些条目以利用 SonarCloud 的最新功能。
SonarQube 用户注意事项 #
如果您熟悉 SonarQube,您可能会尝试处理一些与 分支分析(例如:sonar.branch.name
)和/或 拉取请求分析(例如:sonar.pullrequest.key
)相关的属性。
这些属性完全没有用,SonarCloud 加载项会根据分析类型为您管理它们。
构建配置参考 #
您可以在我们的 Travis CI 构建配置参考 中找到有关 SonarCloud 构建配置格式的更多信息。