跳至主要内容

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

了解 CodeQL 如何分析编译语言、可用的构建选项,并学习在需要时如何自定义数据库生成过程。

谁可以使用此功能?

如果已启用高级设置,则具有 写入 权限的用户

以下仓库类型可使用代码扫描

  • GitHub.com 上的公共仓库
  • 在 GitHub Team、GitHub Enterprise Cloud 或 GitHub Enterprise Server 上的组织拥有的仓库,已启用 GitHub 代码安全

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

代码扫描通过对一个或多个 CodeQL 数据库运行查询来工作。每个数据库包含您仓库中单一语言的代码表示。对于已编译语言 C/C++、C#、Go、Java、Kotlin、Rust 和 Swift,填充此数据库的过程通常涉及构建代码并提取数据。

启用代码扫描后,无论是默认设置还是高级设置,都会使用最简单的方法生成用于分析的 CodeQL 数据库。对于 C/C++、C#、Java 和 Rust,CodeQL 数据库直接从代码库生成,无需构建(none 构建模式)。对于其他已编译语言,CodeQL 使用 autobuild 构建模式来构建代码库。或者,您可以使用 manual 构建模式,指定显式的构建命令,仅分析这些自定义命令构建的文件。

您可以使用 CodeQL 的依赖缓存,将依赖项存储为 GitHub Actions 缓存,而不是从注册表下载。请参阅本文后面的 关于 CodeQL 的依赖缓存

CodeQL 构建模式

CodeQL Action 支持已编译语言的三种不同构建模式

  • 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 的特定缓存,这些缓存将受到仓库缓存配额的限制。请参阅 依赖缓存参考

© . This site is unofficial and not affiliated with GitHub, Inc.