用于代码扫描的 Copilot Autofix(预览版)

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

注释

此功能以有限的公共预览版提供。 若要请求组织访问权限, 请注册公共预览版

功能可能会更改或删除,而不通知。 预览版功能没有服务级别协议(SLA)和有限的支持。

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

先决条件

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

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

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

关于 Copilot Autofix

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 支持的语言的当前列表,请参阅 语言和查询支持

Billing

Copilot Autofix 已包含在您的 GitHub Advanced Security for Azure DevOps 许可证中。 生成修复会消耗贵组织 Azure 计费计量中的 AI 额度。

每次生成修复建议都会消耗令牌,其中包括发送给模型的代码上下文所对应的输入令牌、建议的更改所对应的输出令牌,以及复用现有上下文的缓存令牌。

为了简化计费,这些令牌将转换为称为GitHub AI 信用额度的标准单位,其中 1 个信用额度等于 0.01 美元。 费用将计入与你的 Azure DevOps 组织关联的 Azure 订阅,并在 Azure 成本管理中显示为单独的计量项。

每个修复的成本因周围代码上下文的大小和更改的复杂性而异。

若要监视每日费用,请转到 Azure 门户中的>>成本分析

启用 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)生成警报。

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