用于代码扫描的Copilot自动修复

Copilot Autofix 是适用于 Azure DevOps 的 GitHub Advanced Security 中一项由 AI 提供支持的功能,可为代码扫描警报生成修复建议。 当 CodeQL 识别漏洞或编码错误时,可以直接从“高级安全”选项卡生成警报的修补程序。Copilot Autofix 使用Copilot编码代理生成修补程序,并使用建议的更改打开拉取请求,以便可以通过正常的拉取请求工作流查看、编辑和合并它。

注释

此功能以有限的公共预览版提供。 并非注册预览版的每个人都会收到访问权限。

你需要启用适用于 Azure DevOps 的 GitHub Advanced Security;或者,如果你使用的是独立版体验,则需要启用适用于 Azure DevOps 的 GitHub Code Security,并为你的存储库配置代码扫描

适用于 Azure DevOps 的 GitHub Advanced Security 可与 Azure Repos 配合使用。 若要将 GitHub 高级安全性与 GitHub 存储库配合使用,请参阅 GitHub 高级安全性

先决条件

类别 Requirements
权限 - 若要查看存储库的所有警报的摘要:存储库的 参与者 权限。
- 若要消除高级安全性中的警报:需有项目管理员权限。
- 若要管理高级安全性中的权限:需为项目集合管理员组成员或将高级安全性:管理设置权限设置为允许

有关高级安全权限的详细信息,请参阅 “管理高级安全”权限

  • 已为您的仓库配置代码扫描,采用默认设置或高级设置。
  • 至少一个 CodeQL 代码扫描警报。

关于 Copilot 自动修复

Copilot Autofix 将 CodeQL 的分析功能与支持Copilot编码代理的大型语言模型相结合。 当你为受支持的代码扫描警报生成修复时,Copilot Autofix 会分析该警报及其周边代码,然后创建一个包含以下内容的拉取请求:

  • 建议的代码更改,用于修复根本漏洞。
  • 对正在修复的警报的描述,包括警报 ID、严重性和变更摘要。

由于建议的修补程序考虑了代码库的更广泛上下文,因此更改可以跨越多个引发警报的行,并且可以在需要时包括对其他文件的更改。

Important

Copilot自动修复建议由 AI 模型生成,不保证正确、完整或安全。 请始终仔细查看拉取请求,验证它是否解决警报而不引入新问题,并在合并更改之前对其进行测试。

支持的语言

Copilot Autofix 支持 CodeQL 为代码扫描分析的相同语言,包括 C/C++、C#、Go、Java/Kotlin、JavaScript/TypeScript、Python、Ruby 和 Swift。 有关 CodeQL 支持的语言的当前列表,请参阅 语言和查询支持

启用 Copilot 自动修复

在代码安全设置中针对每个存储库启用 Copilot 自动修复。

  1. 登录到 Azure DevOps 组织(https://dev.azure.com/{yourorganization})。
  2. 选择Project设置>repositories,然后选择要配置的存储库。
  3. “高级安全性 ”部分中,打开 “代码安全功能 ”面板。
  4. 选中代码扫描警报自动修复复选框,为代码扫描警报创建由 Copilot 编码代理生成的自动修复。
  5. 选择“应用”以保存所做的更改。

“代码安全功能”面板的截图,其中突出显示了“用于代码扫描警报的自动修复”复选框。

CodeQL 必须已运行并生成存储库的警报。 有关详细信息,请参阅 设置代码扫描Configure GitHub 高级安全功能

为警报生成修补程序

启用 Copilot 自动修复后,可以针对任何受支持的代码扫描警报生成修复建议。

  1. 选择 Repos>Advanced Security
  2. 选择 “代码扫描 ”选项卡,然后选择警报以打开其详细信息视图。
  3. 查看警报的位置描述建议,以了解此发现。
  4. 选择“生成修复”。

代码扫描警报详细信息视图的屏幕截图,其中右上角带有“生成修复”按钮。

Copilot Autofix 会生成修补程序,并从名为 copilot-autofix/... 的分支打开拉取请求。 生成修复后,拉取请求将显示在警报详情视图中的 “相关拉取请求” 下方。

审查并合并该修复

Copilot Autofix 打开的拉取请求的行为与其他任何Azure Repos拉取请求类似。 其描述概括了该修补程序所处理的警报内容。

由 Copilot Autofix 创建的拉取请求的屏幕截图,显示描述中的警报 ID、严重程度和修复详情。

  1. 可从警报的 相关拉取请求部分打开拉取请求,也可从 Repos>拉取请求 中打开。
  2. 在所有受影响文件的 文件 选项卡中查看建议的更改。
  3. 如果需要匹配代码样式、命名约定或项目要求,请编辑更改。
  4. 通过你平常的审核流程批准并完成该拉取请求。

拉取请求合并并下一个代码扫描运行完成后,如果修复程序删除了基础漏洞,警报会自动关闭。

小窍门

生成的修复方案只是一个起点,而不是最终解决方案。 像对待任何其他更改一样对待拉取请求:在合并之前查看请求、对其进行测试并根据需要请求其他审阅者。

当无法提供解决方案时

Copilot Autofix 无法为每个警报生成修复方案。 修复程序在以下情况下可能不可用:

  • Copilot Autofix 当前不支持警报类型。
  • Copilot判定该警报为误报。
  • 自定义查询或第三方工具(而不是 CodeQL)生成警报。

当修补程序不可用时,请使用警报的 “建议 ”和 “示例 ”部分来修正它或手动关闭警报。 有关详细信息,请参阅 警报详细信息