Skip to main content

关于 CodeQL 代码扫描用于已编译的语言

了解 CodeQL 如何分析已编译语言、提供哪些生成选项,以及如何在需要时自定义数据库生成流程。

谁可以使用此功能?

具有写入访问权限的用户 if advanced setup is already enabled

Code scanning 可用于以下存储库类型:

  • GitHub.com 上的公共存储库
  • GitHub Team、GitHub Enterprise Cloud 或 GitHub Enterprise Server 上的组织拥有的存储库,已启用 GitHub Code Security

关于 CodeQL 分析工作流程 和编译语言

Code scanning 的工作原理是针对一个或多个 CodeQL 数据库运行查询。 每个数据库都包含仓库中代码的单一语言表示形式。 对于编译语言 C/C++、C#、Go、Java、Kotlin、Rust(公共预览版)、和 Swift,填充此数据库的过程通常涉及生成代码和提取数据。

启用 code scanning 时,默认和高级设置都会使用最简单的可用方法生成 CodeQL 数据库用于分析。 对于 C# 和 Java,CodeQL 数据库直接从代码库生成,而无需生成(none 生成模式)。 对于其他编译语言,CodeQL 使用 autobuild 生成模式生成代码库。 或者,也可以使用 manual 生成模式明确指定生成命令,以仅分析这些自定义命令生成的文件。

您可以在使用 CodeQL 时启用依赖缓存,以便将依赖项作为 GitHub Actions 缓存进行存储,而不是从注册表中下载它们。 请参阅本文后面关于 CodeQL 的依赖缓存 的内容。

CodeQL 生成模式

CodeQL 操作支持三种不同的编译语言生成模式:

  •         `none` - CodeQL 数据库是直接从代码库创建的,无需构建代码库(支持所有解释语言,并且额外支持 C# 和 Java)。
    
  •         `autobuild` - CodeQL 检测最可能的构建方法,并使用它尝试构建代码库并创建数据库进行分析(支持 C/C++、C#、Go、Java、Kotlin 和 Swift)。
    
  •         `manual` - 你可以在工作流中定义用于代码库的构建步骤(支持 C/C++、C#、Go、Java、Kotlin 和 Swift)。
    

有关与语言相关的autobuild行为、运行程序要求和手动构建指南,请参阅编译语言的 CodeQL 生成选项和步骤

关于 CodeQL 的依赖项缓存

您可以在使用 CodeQL 时启用依赖缓存,以便将依赖项作为 GitHub Actions 缓存进行存储,而不是从注册表中下载它们。 这降低了在第三方注册表运行不佳时丢失警报的风险,而且对于具有大量依赖项或使用速度较慢的注册表的项目而言,还可能会提高性能。 若要详细了解缓存依赖项如何加速工作流的内容,请参阅 依赖项缓存参考

依赖项缓存适用于所有生成模式,并受 Java、Go 和 C# 支持。

注意

使用依赖项缓存将会存储特定于 CodeQL 的缓存,这些缓存将受仓库的缓存配额限制。 请参阅“依赖项缓存参考”。