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/C++、C#, Java和 Rust,CodeQL 数据库从代码库中直接生成,而不需要构建(none 构建模式)。 对于其他已编译语言,CodeQL 会使用 autobuild 生成模式来构建代码库。 或者,也可以使用 manual 生成模式明确指定生成命令,以仅分析这些自定义命令生成的文件。

可以使用依赖项缓存与CodeQL一起将依赖项存储为GitHub Actions缓存,而不是从注册表中下载依赖项。 请参阅本文后面的 有关依赖项缓存 CodeQL 的信息。

CodeQL 生成模式

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

  • none CodeQL- 数据库直接从代码库创建,而无需构建代码库(支持所有的解释语言,并且还支持C/C++、C#, Java和 Rust)。
  • 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特定缓存,这些缓存将受到存储库的缓存配额的约束。 请参阅“依赖项缓存参考”。