加强安全性和存储库集成

通过此更新,我们将在整个 Azure DevOps 中改进安全性和身份验证。 Azure DevOps OAuth 的重叠机密使机密轮换更加无缝,而 GitHub 高级安全性提供更好的安全概述页筛选,同时确保多存储库发布正确路由依赖项和代码扫描警报。

Azure Pipelines 中的托管映像更新包括 Ubuntu-24.04、Windows 2025 和 mac-OS 15 Sequoia,确保更安全、更可靠的体验。

有关详细信息,请查看发行说明。

概况

适用于 Azure DevOps 的 GitHub Advanced Security

Azure Pipelines

Test Plans

概况

Azure DevOps OAuth 的重叠机密

我们很高兴在 Azure DevOps OAuth 中引入新的重叠机密功能,旨在增强安全性并简化机密轮换。 此功能允许向 OAuth 客户端添加新机密,而上一个机密保持活动状态,确保应用程序的持续作。 可以通过 API 或 Visual Studio 应用页面 UI 以编程方式管理这些机密。

作为持续安全改进的一部分,Azure DevOps OAuth 计划于 2026 年弃用。 我们鼓励你迁移到 Microsoft Entra ID OAuth ,以提高安全功能和长期投资。 在此期间,我们建议使用新的重叠机密功能定期轮换机密。

将语言统计信息标签从“项目摘要”页面中弃用

在接下来的几周内,我们将弃用“项目摘要”页中的“语言”统计信息标记。 删除这些标记有助于优化性能,从而加快加载时间和响应更快速的接口。

更新将自动进行,无需你执行任何作。

添加了交付计划权限

作为我们正在进行的安全增强的一部分,我们引入了新的 “管理交付计划” 项目级权限。 此更改的实施是为了防止读者组用户的无意读写访问。

适用于 Azure DevOps 的 GitHub Advanced Security

使用新列和筛选选项增强安全概述风险页

在“ 风险 ”选项卡下,你会发现新添加的列显示整个组织内新的、固定的安全警报和已消除的安全警报。 我们添加了筛选选项以按项目、工具(机密、依赖项或代码扫描结果)和基于时间的筛选器来优化结果,以定义搜索边界。

此外,应用筛选器会添加 URL 查询参数,使你能够与组织中的其他人共享预筛选视图。

适用于 Azure DevOps 的 GitHub 高级安全性支持的多存储库发布方案

以前,当管道定义位于一个存储库中,GitHub 高级安全性要扫描的源代码位于另一个存储库中时,将处理结果并将其提交到错误的存储库。 警报没有发布到包含源代码的存储库中,而是出现在定义管道的存储库中。

现在,依赖项扫描和代码扫描都正确地将警报路由到包含多存储库方案中扫描的源代码的存储库。

若要启用此功能,请将管道环境变量 advancedsecurity.publish.repository.infer: true 设置为推断存储库,以便从工作目录中的存储库发布。

或者,如果不显式签出存储库或使用别名签出存储库,请改用变量 advancedsecurity.publish.repository: $[ convertToJson(resources.repositories['YourRepositoryAlias']) ]

YAML 代码片段:

  trigger:
  - main

resources:
  repositories:
    - repository: BicepGoat
      type: git
      name: BicepGoat
      ref: refs/heads/main
      trigger:
        - main

jobs:
  # Explicit - `advancedsecurity.publish.repository` explicitly defines the repository to submit SARIF to.
  - job: "AdvancedSecurityCodeScanningExplicit"
    displayName: "🛡 Infrastructure-as-Code Scanning (Explicit)"
    variables:
      advancedsecurity.publish.repository: $[ convertToJson(resources.repositories['BicepGoat']) ]
    steps:
      - checkout: BicepGoat
      - task: TemplateAnalyzerSarif@1
        displayName: Scan with Template Analyzer
      - task: AdvancedSecurity-Publish@1
        displayName: Publish to IaC Scanning Results to Advanced Security


  # Infer - `advancedsecurity.publish.repository.infer` specifies that the `AdvancedSecurity-Publish` must
  # infer repository to submit SARIF to from the working directory on the build agent.
  - job: "AdvancedSecurityCodeScanningInfer"
    displayName: "🛡 Infrastructure-as-Code Scanning (Infer)"
    variables:
      advancedsecurity.publish.repository.infer: true
    steps:
      - checkout: BicepGoat
      - task: TemplateAnalyzerSarif@1
        displayName: Scan with Template Analyzer
      - task: AdvancedSecurity-Publish@1
        displayName: Publish to IaC Scanning Results to Advanced Security

适用于 Azure DevOps 警报的 GitHub 高级安全性的服务挂钩(预览版)

现在可以为 GitHub 高级安全警报事件配置服务钩子,包括:

  • 新建警报
  • 警报数据已更改
  • 警报状态已更改

与其他存储库事件一样,可以按存储库和分支进行筛选。 对于警报,可以按警报类型(依赖项、代码扫描或机密)和警报严重性进行筛选。

若要参与预览版,请填写预览兴趣表单或向我们发送电子邮件!

pnpm v9 支持现已应用于 GitHub 高级安全性,用于 Azure DevOps 依赖性扫描

随着 pnpm v8 在 4 月底达到生命周期结束,下一个依赖项扫描更新将包括对 pnpm v9 的支持。 此更新是为了响应 开发人员社区 对 pnpm v9 支持的请求。

Azure Pipelines

托管映像更新

我们将推出更新,使 Azure Pipelines 的托管代理安全且最新。 这些更新包括添加对 Ubuntu-24.04、Windows 2025 映像和 macOS-15 Sequoia 的支持,同时弃用 Ubuntu-20.04 和 Windows Server 2019 等旧映像。

有关更多详细信息,请访问我们的 博客文章

macOS-15 Sequoia 已正式发布

从 4 月 1 日开始,镜像 macOS-15 将在 Azure Pipelines 托管代理上可用。 若要使用此映像,请更新 YAML 文件以包括 vmImage:'macos-15'

- job: macOS15
  pool:
    vmImage: 'macOS-15'
  steps:
  - bash: |
      echo Hello from macOS Sequoia
      sw_vers

有关已安装的 macOS-15 软件,请参阅 映像配置

指定 macOS-14 时,仍会使用 macOS-latest 映像。 我们将在 4 月份更新 macOS-latest 以使用 macOS-15

Windows-2025 映像现已提供预览版

windows-2025 映像目前为预览版,适用于 Azure Pipelines 托管代理。 若要使用此映像,请更新 YAML 文件以包括 vmImage:'windows-2025'

- job: win2025
  pool:
    vmImage: 'windows-2025'
  steps:
  - pwsh: |
      Write-Host "(Get-ComputerInfo).WindowsProductName"
      Get-ComputerInfo | Select-Object WindowsProductName
      Write-Host "`$PSVersionTable.OS"
      $PSVersionTable.OS

有关 Windows Server 2025 已安装的软件,请参阅 映像配置

ubuntu-latest 管道映像将开始使用 ubuntu-24.04

在接下来的几周内,管道作业指定 ubuntu-latest 将开始使用 ubuntu-24.04 而不是 ubuntu-22.04

有关使用不再位于图像上的 ubuntu-24.04 工具的任务的指南,请参阅我们的 博客文章。 若要继续使用 Ubuntu 22.04,请使用 ubuntu-22.04 映像标签:

- job: ubuntu2404
  pool:
    vmImage: 'ubuntu-24.04'
  steps:
  - bash: |
      echo Hello from Ubuntu 24.04
      lsb_release -d
  - pwsh: |
      Write-Host "`$PSVersionTable.OS"
      $PSVersionTable.OS

ubuntu-20.04 管道映像已弃用,将于 4 月 1 日停用

我们即将弃用对 Azure Pipelines 中 Ubuntu 20.04 映像的支持,因为它的支持即将结束。 在我们的 博客文章中查找弃用计划和降级时间表。

工作负荷标识联合使用 Entra 颁发者

就在一年多前,我们 正式推出工作负载身份联合。 工作负载标识联合允许你配置服务连接而不使用机密。 支持服务连接的标识(应用注册、托管标识)只能用于预期目的:标识联合凭据中配置的服务连接。

现在,我们将更改新 Azure 和 Docker 服务连接的联合凭据的格式。 现有服务连接将像以前一样工作。

  Azure DevOps 颁发者 条目颁发者(新服务连接)
发行人 https://vstoken.dev.azure.com/<organization id> https://login.microsoftonline.com/<Entra tenant id>/v2.0
使用者 sc://<organization name>/<project name>/<service connection name> <entra prefix>/sc/<organization id>/<service connection id>

配置没有变化,获取令牌的方式保持不变。 管道任务不需要更新,可以像以前一样继续工作。

创建服务连接的步骤不会更改,在大多数情况下,新颁发者不可见。 手动配置 Azure 服务连接时,会显示新的联合凭据:

在为应用注册或托管标识创建联合凭据时,请按照之前的方式复制这些值。

自动化

使用 REST API 在自动化中创建服务连接时,请使用 API 返回的联合凭据:

authorization.parameters.workloadIdentityFederationIssuer
authorization.parameters.workloadIdentityFederationSubject

同样,当与 Terraform azuredevops 提供程序创建服务连接时, azuredevops_serviceendpoint_azurerm 资源返回 workload_identity_federation_issuerworkload_identity_federation_subject 属性。

详细信息

Gradle@4任务

已创建一个新的 Gradle@4 任务,支持 Gradle 8.0。 从 Gradle 开始,Gradle@4 任务移除了内置代码覆盖率选项。 要在管道中将代码覆盖率用于 Gradle,请执行以下操作:

  • 在 build.gradle 文件中指定代码覆盖率插件。 有关详细信息,请参阅 Gradle 代码分析选项
  • 任务之后,在管道中使用Gradle@4任务。

SonarQube 分析配置已移至 任务中的 SonarQubePrepare Analysis Configuration 扩展。

请求某个阶段运行的用户身份标识

为了提高 YAML 管道的安全性,你可能希望知道谁请求了要运行的阶段。 为满足此需求,我们将添加两个新的预定义变量,Build.StageRequestedByBuild.StageRequestedById。 这些变量与 Build.RequestedForBuild.RequestedForId 变量类似,但适用于阶段,而不是运行。

例如,当用户显式触发用户操作时,比如在手动触发某个阶段或再次运行一个阶段,其标识用于填充这两个变量。

Test Plans

发布代码覆盖率结果 v2 任务改进

在此版本中,我们将包括对 v2 任务的多项改进:

  • 扩展了对各种代码覆盖率格式的支持,包括:.coverage、.covx、.covb、.cjson、.xml、.lcov 和 pycov1。
  • 生成全面的 cjson 文件(和代码覆盖率报告),其中包含详细的代码覆盖率信息,例如文件名、涵盖/未涵盖的行等。
  • 支持差异覆盖率(PR 覆盖率):v2 可为同一管道中的多种语言生成差异覆盖率 PR 注释。
  • v2 任务现在支持生成质量检查任务,该任务在 v1 任务中不受支持。

在 XLSX 中使用自定义列导出测试用例

现在可以在 XLSX 中使用自定义列导出测试用例。 根据反馈,测试计划支持使用自定义列导出测试用例,从而更好地灵活地控制共享和分析的数据。 此增强功能可帮助你根据需要定制导出,确保导出的信息相关且可作。

后续步骤

注释

这些功能将在未来两到三周内推出。

请去 Azure DevOps 上看看。

如何提供反馈

我们很乐意听到你对这些功能的看法。 使用帮助菜单报告问题或提供建议。

提出建议

你还可以在 Stack Overflow 上获取社区的建议和问题解答。

谢谢

Silviu Andrica