使用 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 扫描仪检查代码 #

在检查代码之前,您需要

  1. 确保您的存储库在 Travis CI 上已正确激活。请参阅 Travis CI 教程
  2. 在 SonarCloud 上为您的帐户 创建用户身份验证令牌
  3. 加密此令牌 travis encrypt abcdef0123456789 或在 存储库设置 中定义 SONAR_TOKEN
  4. 查找您要将项目推送到哪个 SonarCloud.io 组织 并获取其密钥
  5. 为您的项目创建一个 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 构建配置格式的更多信息。