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

SonarQube 与 Azure DevOps 的集成使您能够维护 Azure DevOps 存储库中的代码质量和安全性。它与 Azure DevOps Server 和 Azure DevOps Services 兼容。

发布时间:2024-03-08浏览次数:21

SonarQube 与 Azure DevOps 的集成使您能够维护 Azure DevOps 存储库中的代码质量和安全性。它与 Azure DevOps Server 和 Azure DevOps Services 兼容。

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

  • 导入 Azure DevOps 存储库:将 Azure DevOps 存储库导入 SonarQube 以轻松设置 SonarQube 项目。

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

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

先决条件

  • 与 Azure DevOps Server 集成需要 Azure DevOps Server 2022、Azure DevOps Server 2020 和 Azure DevOps Server 2019(包括 Express 版本)。

  • 您已在 Administration  >  Configuration  >  General Settings > General中设置了 SonarQube Server 基本 URL

分支分析

Community Edition 不支持多个分支的分析,因此您只能分析您的主分支。从 Developer Edition开始,您可以分析多个分支和拉取请求。

如果你使用的是社区版并且你的代码库未存储在 Azure Repos 上,则你的默认分支必须命名为“master”才能进行分析。

将 Azure DevOps 存储库导入 SonarQube

通过设置将 Azure DevOps 存储库导入到 SonarQube,您可以轻松地从 Azure DevOps 存储库创建 SonarQube 项目。如果您使用的是 Developer Edition 或更高版本,这也是添加拉取请求修饰的第一步。

要设置 Azure DevOps 存储库的导入:

  1. 设置您的全局 DevOps 平台设置

  2. 添加个人访问令牌以导入存储库

设置您的全局设置

要将 Azure DevOps 存储库导入 SonarQube,您需要首先设置全局 SonarQube 设置。导航到 管理>配置>常规设置DevOps 平台集成,选择 Azure DevOps 选项卡,然后单击 创建配置 按钮。指定以下设置:

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

  • Azure DevOps 集合/组织 URL:如果您使用的是 Azure DevOps 服务器,请提供完整的 Azure DevOps 集合 URL。例如,  https://ado.your-company.com/DefaultCollection如果您使用的是 Azure DevOps 服务,请提供完整的 Azure DevOps 组织 URL。例如,  https://dev.azure.com/your_organization

  • 个人访问令牌:Azure DevOps 用户帐户用于装饰拉取请求。我们建议使用具有管理员权限的专用 Azure DevOps 帐户。您需要 此帐户的个人访问令牌 ,其范围为  将分析的存储库的“代码” > “读取和写入”授权。管理员可以在Administration > Configuration > Encryption中加密此令牌 请参阅 安全性 的 设置加密部分 页面了解更多信息。此个人访问令牌用于向拉取请求报告您的质量门状态。在下一部分中,您将被要求提供另一个个人访问令牌来导入项目。

添加个人访问令牌以导入存储库

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

然后,系统会要求您提供具有 Code (Read & Write) 范围的个人访问令牌,以便 SonarQube 可以访问并列出您的 Azure DevOps 项目。该令牌将存储在 SonarQube 中,并可以随时在 Azure DevOps 中撤销。

保存个人访问令牌后,您将看到可以设置并添加到 SonarQube 的 Azure DevOps 项目列表。以这种方式设置项目还定义了拉取请求修饰的项目设置。

有关使用 Azure Pipelines 分析项目的信息,请参阅 下面的使用 Azure Pipelines 分析项目 部分。

使用 Azure Pipelines 分析项目

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

自动分支检测仅在使用 Git 时可用。

安装你的扩展

从 Visual Studio Marketplace 中,  单击 “免费获取”按钮安装SonarQube 扩展 。

Azure DevOps 服务器 - 构建代理

如果您使用 Microsoft 托管的构建代理 ,则无需安装其他任何内容。该扩展将与所有托管代理(Windows、Linux 和 macOS)配合使用。

如果您自行托管构建代理,请确保您至少安装了 SonarQube 支持的最低 Java 版本。

添加新的 SonarQube 服务端点

安装扩展后,您需要在 Azure DevOps 项目设置中将 SonarQube 服务器声明为服务端点:

  1. 在 Azure DevOps 中,转到 项目设置>服务连接

  2. 选择 新建服务连接 ,然后  从服务连接列表中选择SonarQube 。

  3. 输入您的 SonarQube 服务器 URL、 身份验证令牌和好记的 服务连接名称然后,选择 “保存”以保存您的连接。

配置分支分析

添加 SonarQube 服务端点后,您需要配置分支分析。您将在构建定义中使用以下任务来分析您的项目:

  • 准备分析配置:此任务在执行构建之前配置所需的设置。有关更多详细信息,请参阅下面的使用准备分析配置任务文章。

  • 运行代码分析(在 Maven 或 Gradle 项目中不使用):此任务执行源代码分析。您可以指定使用哪个版本的 Java 进行分析。选项有:

    • JAVA_HOME: 扫描仪会获取JAVA_HOME系统上环境变量的当前值,因此您可以自由选择该值。SonarQube 必须支持指定的版本。

    • JAVA_HOME_11_X64:当您在自托管构建代理上运行管道时,通常会设置此变量,并且扫描器会自动选择它。如果未检测到变量,扫描器将使用 的值JAVA_HOME

    • JAVA_HOME_17_X64:当您在自托管构建代理上运行管道时,通常会设置此变量,并且扫描器会自动选择它。如果未检测到变量,扫描器将使用 的值JAVA_HOME

  • 发布质量门结果:此任务在构建摘要中显示质量门状态,让您知道您的代码是否符合生产质量标准。此任务可能会增加您的构建时间,因为您的管道必须等待 SonarQube 处理分析报告。强烈推荐但可选。

在下面选择您的构建技术以展开配置分支分析的说明并查看示例 .yml 文件。

Gradle 或 Maven





。网





其他(JavaScript、TypeScript、Go、Python、PHP 等)


分析 C/C++/Obj-C 项目

















运行您的管道

提交并推送您的代码以触发管道执行和 SonarQube 分析。分支上的新推送(以及拉取请求,如果您设置了拉取请求分析)会触发 SonarQube 中的新分析。

维护拉取请求代码的质量和安全性

使用拉取请求可以防止不安全或不合格的代码与主分支合并。以下分支策略可以通过分析代码并识别项目的所有拉取请求中的问题来帮助您维护代码质量和安全。这些策略是可选的,但强烈建议您选择它们,以便您可以快速跟踪、识别和修复代码中的问题。

确保自动分析您的拉取请求

 通过在目标分支上添加构建验证分支策略,确保自动分析所有拉取请求 。

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

 通过在目标分支上添加SonarQube/quality gate 状态检查分支策略,防止合并质量门失败的拉取请求 。

配置为 Mono 存储库一部分的项目无法使用此状态检查分支策略来阻止拉取请求合并。

观看此 视频 ,快速了解如何防止拉取请求在未通过质量门时被合并。

报告 Azure DevOps 中的质量门状态

设置 SonarQube 以导入 Azure DevOps 存储库(如 上面将 Azure DevOps 存储库导入到 SonarQube 中所示)后 ,SonarQube 可以直接向 Azure DevOps 拉取请求报告您的质量门状态和分析指标。

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

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

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

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

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

SonarQube 还可以向现有和手动创建的项目的 Azure DevOps 拉取请求报告质量门状态。按照上面将Azure DevOps 存储库导入到 SonarQube部分所示设置全局设置后 ,在Project Settings > General Settings > DevOps Platform Integration 中设置以下项目设置 

  • 项目名

  • 存储库名称

高级配置

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



配置多个DevOps平台实例

链接问题

使用准备分析配置任务

准备分析配置任务将在执行构建之前配置所有必需的设置。此任务是强制性的。对于 .NET 解决方案或 Java 项目,此任务有助于与 MSBuild、Maven 和 Gradle 任务无缝集成。

SonarQubePrepare 任务属性


常问问题

缺少构建代理功能

此前,存在一个与安装了非 Oracle Java 版本的 Windows Build Agent 相关的 Microsoft 错误;代理无法检测到 SonarQube Azure DevOps 插件所需的功能。据悉,这个bug现已解决

如果您仍然遇到问题并且确定 java 可执行文件在 PATH 环境变量中可用,您可以通过转至 构建代理>功能>用户功能>添加功能来手动添加缺少的功能。在这里,您可以添加键、值对 java 和 null,这应该允许在该构建代理上安排 SonarQube 插件。

SonarQube 和 Azure 之间的交互详细信息

当您对拉取请求运行声纳分析时,每个声纳问题都将是对 Azure DevOps 拉取请求的评论。如果 AzureDevOps 实例配置正确,并且您在 SonarQube 中将问题设置为已解决,则AzureDevOps Pull 请求注释将自动得到解决。同样,当您修复代码中的问题并再次运行分析构建时,该问题将在 Sonar 中解决并在 AzureDevOps 中删除。


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

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

  • 移动电话180-210-69380

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