欢迎访问Sonar Source中文网站!
语言选择: ∷ 

SonarQube 与 Bitbucket Cloud 的集成使您可以维护 Bitbucket Cloud 存储库中的代码质量和安全性。

发布时间:2024-03-06浏览次数:18

SonarQube 与 Bitbucket Cloud 的集成使您可以维护 Bitbucket Cloud 存储库中的代码质量和安全性。

通过这种集成,您将能够:

  • 导入您的 BitBucket Cloud 存储库:将您的 Bitbucket Cloud 存储库导入 SonarQube 以轻松设置 SonarQube 项目。

  • 使用 Bitbucket Pipelines 分析项目:将分析集成到您的构建管道中。在 Bitbucket Pipelines 中运行的 SonarScanner 可以自动检测正在构建的分支或拉取请求,因此您无需专门将它们作为参数传递给扫描仪(从 Developer Edition开始可以使用分支和拉取请求分析)。

  • 向拉取请求报告质量门状态(从Developer Edition开始 ):直接在 Bitbucket Cloud 中查看质量门和代码指标结果,以便了解合并更改是否安全。

  • 使用 Bitbucket Cloud 进行身份验证:使用您的 Bitbucket Cloud 凭据登录 SonarQube。

将 Bitbucket 云存储库导入 SonarQube

设置将 BitBucket Cloud 存储库导入到 SonarQube 中,您可以轻松地从 Bitbucket Cloud 存储库创建 SonarQube 项目。这也是添加身份验证的第一步,并且从 Developer Edition开始,也是向拉取请求报告分析和质量门状态的第一步。

要将 Bitbucket 存储库导入 SonarQube,您只能拥有一种 Bitbucket 全局配置,包括 Bitbucket Server 和 Bitbucket Cloud。有关更多信息,请参阅 下面的配置多个 DevOps 平台实例 部分。

要设置 BitBucket Cloud 存储库的导入:

  1. 创建 OAuth 使用者。

  2. 设置全局 DevOps 平台集成设置。

  3. 添加您的 Bitbucket 用户名和应用程序密码。

创建您的 OAuth 使用者

SonarQube 使用专用的 OAuth 使用者 来导入存储库并显示拉取请求的质量门状态。在 Bitbucket Cloud 工作区设置中创建 OAuth 使用方并指定以下内容:

  • 名称:您的 OAuth 使用者的名称

  • 回调 URL:Bitbucket Cloud 需要此字段,但 SonarQube 不使用它,因此您可以使用任何 URL。

  • 这是一个私人消费者:您的 OAuth 消费者需要是私人的。确保选中此复选框。

  • 权限:授予 Pull 请求权限 的 读取访问权限 。

设置您的全球 DevOps 平台集成设置

要设置全局 DevOps 平台集成设置,请导航到 管理>配置>常规设置DevOps 平台集成,选择 Bitbucket 选项卡,然后选择 Bitbucket Cloud 作为要配置的变体。从此处指定以下设置:

  • 配置名称 (仅限企业版和数据中心版):用于在项目级别标识您的 Bitbucket Cloud 配置的名称。使用简洁且易于识别的内容。

  • 工作区 ID:工作区 ID 是您的 bitbucket 云 URL 的一部分 https://bitbucket.org/<workspace-id>/<repository-slug>

  • OAuth 密钥:当您创建 OAuth 使用者时,Bitbucket 会自动创建 OAuth 密钥。您可以在 OAuth Consumer下的 Bitbucket Cloud 工作区设置中找到它。

  • OAuth Secret:当您创建 OAuth 使用方时,Bitbucket 会自动创建 OAuth Secret。您可以在 OAuth Consumer下的 Bitbucket Cloud 工作区设置中找到它。管理员可以在Administration > Configuration > Encryption中加密此机密  有关详细信息,请参阅 “安全”页面 的 “设置加密”部分。

添加您的 Bitbucket 用户名和应用程序密码

设置全局设置后,您可以通过单击 项目 主页右上角的 添加项目按钮 并选择 Bitbucket从 Bitbucket Cloud 添加项目。

然后,系统会要求您提供 Bitbucket 用户名和 应用程序密码您的应用程序密码需要 存储库读取 权限。

添加 Bitbucket 用户名和应用密码后,您将看到 Bitbucket Cloud 项目列表,您可以通过将它们添加到 SonarQube 来设置这些项目。以这种方式设置项目还会设置项目设置以显示拉取请求的质量门状态。

使用 Bitbucket Pipelines 分析项目

在 Bitbucket Pipelines 中运行的 SonarScanner 可以自动检测正在构建的分支或拉取请求,因此您无需专门将它们作为参数传递给扫描仪。

要使用 Bitbucket Pipelines 分析您的项目,您需要:

  • 设置您的环境变量。

  • 配置您的 bitbucket-pipelines.yml file.

设置环境变量

您可以在 Bitbucket Cloud 设置中为所有管道安全地设置环境变量。 有关详细信息,请参阅 用户定义的变量。

您可能需要先提交, bitbucket-pipelines.yml 然后才能为管道设置环境变量。

您需要在Bitbucket Cloud中设置以下环境变量进行分析:

  • SONAR_TOKEN:为 Bitbucket Cloud 生成 SonarQube 令牌,并 在 Bitbucket Cloud 中  创建一个自定义的 安全SONAR_TOKEN环境变量,将 其作为 Name  ,并将您生成的令牌作为 Value

  • SONAR_HOST_URL:创建一个自定义环境变量,将其 SONAR_HOST_URL 作为名称  并将您的 SonarQube 服务器 URL 作为 

配置您的 bitbucket-pipelines.yml 文件

本节向您展示如何配置 bitbucket-pipelines.yml 文件。

您将根据您的 SonarQube 版本设置您的构建:

  • 社区版:社区版不支持多个分支,因此您应该只分析您的主分支。branches 您可以通过将主分支设置为文件中管道 中的唯一分支 bitbucket-pipelines.yml 而不使用 pull-requests 管道来限制对主分支的分析。

  • 开发版及以上版本branches:如果您使用 和 管道,Bitbucket Pipelines 可以构建特定分支和拉取请求 pull-requests ,如下面的示例配置所示。

单击下面您正在使用的扫描仪以展开示例配置:

注意: 这假设一个典型的 gitflow 工作流程。 有关自定义哪些分支或拉取请求触发分析的更多信息,请参阅 在 Atlassian 提供的Pipelines YAML 文件上使用 glob 模式。

适用于 Gradle 的声纳扫描仪

注意:build.gradle项目密钥可能必须通过 文件或命令行参数 提供 。有关更多信息,请参阅 SonarScanner for Gradle 文档。

将以下内容添加到您的 build.gradle 文件中:

plugins {
  id "org.sonarqube" version "3.5.0.2730"}

在您的 中写入以下内容 bitbucket-pipelines.yml

image: openjdk:17definitions:  steps:    - step: &build-step        name: SonarQube analysis        caches:          - gradle          - sonar        script:          - bash ./gradlew sonar  caches:    sonar: ~/.sonarclone:  depth: fullpipelines:  branches:    '{master,main,develop}':      - step: *build-step  pull-requests:    '**':      - step: *build-step
用于 Maven 的 SonarScanner

注意: 可能必须通过命令行参数提供项目密钥。有关更多信息,请参阅 SonarScanner for Maven 文档。

在您的 中写入以下内容 bitbucket-pipelines.yml

image: maven:3.3.9definitions:
  steps:
    - step: &build-step
        name: SonarQube analysis
        caches:
          - maven
          - sonar
        script:
          - mvn verify sonar:sonar
  caches:
    sonar: ~/.sonarclone:
  depth: fullpipelines:
  branches:
    '{master,main,develop}':
      - step: *build-step
  pull-requests:
    '**':
      - step: *build-step
.NET 声纳扫描仪

在您的 中写入以下内容 bitbucket-pipelines.yml

image: mcr.microsoft.com/dotnet/core/sdk:latestdefinitions:
  steps:
    - step: &build-step
        name: SonarQube analysis
        caches:
          - dotnetcore
          - sonar
        script:
          - apt-get update
          - apt-get install --yes openjdk-17-jre
          - dotnet tool install --global dotnet-sonarscanner
          - export PATH="$PATH:/root/.dotnet/tools"
          - dotnet sonarscanner begin /k:"YOUR_PROJECT_KEY*" /d:"sonar.token=${SONAR_TOKEN}"  /d:"sonar.host.url=${SONAR_HOST_URL}"
          - dotnet build 
          - dotnet sonarscanner end /d:"sonar.token=${SONAR_TOKEN}"
  caches:
    sonar: ~/.sonarclone:
  depth: fullpipelines:
  branches:
    '{master,main,develop}':
      - step: *build-step
  pull-requests:
    '**':
      - step: *build-step
声纳扫描仪 CLI

下面的高级配置是 SonarQube Scan Bitbucket Pipe 的替代方案。如果您不需要允许扫描仪缓存的设置,我们建议使用 Bitbucket Pipe 配置。

您可以通过以下方式设置 SonarScanner CLI 配置:

  • SonarQube Scan Bitbucket Pipe:使用 SonarQube Scan Bitbucket Pipe 是设置基本配置的简单方法。您将在SonarQube 扫描 Bitbucket Pipe页面上找到 Bitbucket Pipe 和配置说明  。

  • 高级配置:如果您需要允许扫描仪缓存的高级设置,您可以将以下内容添加到您的 bitbucket-pipelines.yml 文件中: 

image: <image for build>definitions:
  steps: &build-step
    - step:
        name: SonarQube analysis
        image: sonarsource/sonar-scanner-cli:latest
        caches:
          - sonar
        script:
          - sonar-scanner
  caches:
    sonar: /opt/sonar-scanner/.sonarclone:
  depth: fullpipelines:
  branches:
    '{master,main,develop}':
      - step: *build-step
  pull-requests:
    '**':
      - step: *build-step

必须通过 sonar-project.properties 文件或命令行参数提供项目密钥。有关更多信息,请参阅 SonarScanner CLI 文档。

当质量门失败时管道作业失败

您可以使用 SonarQube 质量门检查 Bitbucket Pipe,在质量门失败 时使管道作业失败,以确保您的代码符合质量标准  。

如果您不想使用 SonarQube 质量门检查管道,您可以指示扫描仪在分析结束时等待 SonarQube 质量门状态。要启用此功能,请将 -Dsonar.qualitygate.wait=true 参数传递到文件中的扫描仪 bitbucket-pipelines.yml 。

这将使分析步骤定期轮询 SonarQube,直到计算出质量门。这将增加您的管道持续时间。请注意,如果质量门为红色,这将使分析步骤失败,即使实际分析本身是成功的。我们建议仅在必要时使用此参数(例如,如果质量门为红色,则阻止部署管道)。它不应该用于报告拉取请求中的质量门状态。

您可以将该 sonar.qualitygate.timeout 属性设置为扫描仪等待处理报告的时间(以秒为单位)。默认值为 300 秒。

了解更多信息

有关使用 Bitbucket Pipelines 配置构建的更多信息,请参阅  Atlassian 提供的配置 bitbucket-pipelines.yml文档。

在 Bitbucket Cloud 中报告您的质量门状态

在上面创建并安装 OAuth 使用者后,SonarQube 可以将您的质量门状态和分析指标直接报告给您的 Bitbucket Cloud 拉取请求。

为此,请单击 项目 主页右上角的 添加项目按钮,然后 从下拉菜单中 选择 Bitbucket,从 Bitbucket 添加项目。

然后,按照 SonarQube 中的步骤分析您的项目。SonarQube 会自动设置在拉取请求中显示质量门所需的项目设置。

要在拉取请求中报告质量门状态,需要对您的代码运行 SonarQube 分析。您可以在Pull 请求分析页面找到 Pull 请求分析所需的其他参数  。

如果您手动创建项目或将质量门报告添加到现有项目,请参阅以下部分。

报告手动创建或现有项目中的质量门状态

SonarQube 还可以向 Bitbucket Cloud 现有项目和手动创建项目的拉取请求报告您的质量门状态。创建并安装 OAuth 使用方并更新全局设置(如 上面将 Bitbucket Cloud 存储库导入 SonarQube部分所示)后,请在Project Settings > General Settings > DevOps Platform Integration 中设置以下项目设置 

  • 配置名称:与您的 GitHub 实例对应的配置名称。

  • 存储库 SLUG:存储库 SLUG 是 Bitbucket 云 URL 的一部分。例如, https://bitbucket.org/<workspace>/<repository>

高级配置

报告单一存储库中拉取请求的质量门状态

从Enterprise Edition开始,支持在 Mono 存储库设置中报告质量门状态以拉取请求 

在单声道存储库设置中,多个 SonarQube 项目(每个项目对应于单声道存储库中的一个单独项目)都绑定到同一个 Bitbucket Cloud 存储库。您需要设置作为 mono 存储库一部分的每个 SonarQube 项目来报告您的质量门状态。

您需要手动设置作为 Mono 存储库一部分的项目,如 上面的报告手动创建或现有项目中的质量门状态 部分所示。您还需要 在Project Settings > General Settings > DevOps Platform Integration中将Enable mono 存储库支持设置设置 为 true  

设置项目设置后,通过调整分析范围并将项目名称传递给扫描仪来确保分析正确的项目。请参阅以下部分了解更多信息。

确保分析正确的项目

您需要调整分析范围以确保 SonarQube 不会分析 Mono 存储库中其他项目的代码。为此,请 在“项目设置” > “分析范围” 中为您的项目 设置源文件包含 ,其模式仅包含相应文件夹中的文件。例如,添加  到包含内容将仅包含  分析中文件夹中的代码。 有关设置分析范围的更多信息,请参阅 缩小焦点。./MyFolderName/**/*MyFolderName

将项目名称传递给扫描仪

由于 Mono 存储库的性质,SonarQube 扫描仪可能会将 Mono 存储库的所有项目名称读取为相同的。为了避免多个项目同名,您需要将 sonar.projectName 参数传递给扫描仪。例如,如果您使用 Maven 扫描器,您将通过 mvn sonar:sonar -Dsonar.projectName=YourProjectName.

配置多个DevOps平台实例

SonarQube 可以向多个 DevOps 平台实例报告您的质量门状态。为此,您需要为每个 DevOps 平台实例创建一个配置,并将该配置分配给适当的项目。

  • 作为 Developer Edition的一部分,您可以为每个 DevOps 平台创建一个配置。

  • 从 Enterprise Edition开始,您可以为每个 DevOps 平台创建多个配置。 

链接问题

将质量门状态添加到拉取请求时,各个问题将自动链接到其 SonarQube 对应问题。为了使其正常工作,请转至管理>配置>常规设置>常规>常规以设置实例的 服务器基本 URL否则,链接将默认为 localhost.

使用 Bitbucket 云进行身份验证

请参阅有关Bitbucket Cloud身份验证的文章,了解更改 OAuth 设置的详细信息。

当质量门失败时防止拉取请求合并

设置拉取请求分析后,如果拉取请求未通过质量门,您可以阻止合并拉取请求。有两种方法可以实现此目的(两种方法都需要高级 Bitbucket 云计划)。

选项 1:如果使用 Bitbucket Pipelines

  1. 您必须将 Bitbucket Pipelines 与 Premium Bitbucket Cloud 计划一起使用。

  2. 确保质量门失败时 Bitbucket Pipeline 也会失败(请参阅上面的质量门失败时使管道作业失败

  3. 在 Bitbucket 中,转至存储库设置>分支限制添加分支限制或编辑现有分支限制:

    • 最后一次提交的成功构建的最小数量,没有失败的构建,也没有正在进行的构建 

    • 通过未解决的合并检查来防止合并

    • 合并设置选项卡中,选择:


微信扫码微信扫码 关注我们

  • 24小时咨询热线180-210-69380

  • 移动电话180-210-69380

Copyright © 2022 All Rights Reserved. 地址:上海市浦东新区崮山路538号808 苏ICP123456 XML地图