跳至主要内容

代码扫描分析耗时过长

您可以微调代码扫描配置,以最小化分析时间。

您可以尝试以下几种方法来缩短代码扫描分析的构建时间。

增加内存或 CPU 核心

如果您使用 GitHub 托管的 runner 进行代码扫描分析,建议升级到更大的 runner。这些 runner 拥有比标准 runner 更多的 RAM、CPU 和磁盘空间。有关更大 runner 和代码扫描的更多信息,请参阅 使用更大的运行器为默认设置配置更大的运行器

如果您使用自托管 runner 来运行代码扫描分析,可以增加这些 runner 的内存或 CPU 核心数。如果您使用 CodeQL 的高级设置进行分析,请检查 CodeQL 的推荐硬件资源,以确保自托管 runner 符合这些要求。有关更多信息,请参阅 运行 CodeQL 的推荐硬件资源

使用矩阵构建并行化分析

要加快包含多个作业的工作流的分析速度,您可以修改工作流以使用矩阵。有关详细信息,请参阅 在工作流中运行作业变体

默认的 CodeQL 分析工作流使用语言矩阵,这会使每种语言的分析并行运行。但如果您在“Initialize CodeQL”步骤中直接指定了要分析的语言(即使用高级设置),则各语言的分析会顺序进行。在此配置下,您可以通过将高级设置工作流改为使用矩阵来加快分析速度。示例请参阅 某些语言未在 CodeQL 高级设置中分析 中的工作流摘录。

减少单个工作流中被分析的代码量

分析时间通常与被分析代码的数量成正比。如果您使用 CodeQL 的高级设置,可以通过减少一次性分析的代码量来缩短分析时间。例如,排除测试代码,或将分析拆分为多个工作流,每次仅分析代码的一个子集。

在使用 build-mode: autobuildbuild-mode: manual 时,对于 Java、Kotlin、Go、C、C++、C# 等编译型语言,CodeQL 会分析工作流运行期间构建的所有代码。要限制分析的代码量,请通过在 run 块中指定自己的构建步骤,仅构建您希望分析的代码。您还可以将自定义构建步骤与 pathspaths-ignore 过滤器配合,针对 pull_requestpush 事件确保工作流仅在特定代码变更时运行。更多信息,请参阅 GitHub Actions 工作流语法

对于 JavaScript、Python、TypeScript 等 CodeQL 在不编译源代码的情况下分析的语言,或对使用 build-mode: none 的编译型语言,您可以指定额外的配置选项以限制要分析的代码量。更多信息,请参阅 代码扫描工作流配置选项

如果您将 CodeQL 分析拆分为多个工作流,仍建议至少保留一个在 schedule 上运行的工作流,以分析仓库中的全部代码。因为 CodeQL 会分析组件之间的数据流,一些复杂的安全行为仅能在完整构建时被检测到。

仅在 schedule 事件期间运行

您可能会发现分析在 pushpull_request 事件期间比较慢。如果是这种情况,您可以将分析触发仅设置为 schedule 事件。如果您使用 CodeQL 进行代码扫描分析,可通过高级设置工作流进行配置,默认设置无法实现此功能。更多信息,请参阅 了解 GitHub Actions

检查工作流运行的查询或规则

另一种减少分析时间的办法是仅在 Pull Request 工作流中运行您认为关键的查询或规则。如果您使用第三方代码扫描工具,请查阅该工具的文档。

在 CodeQL 中,每种语言都有两套主要的查询套件可用。如果您已经优化了 CodeQL 数据库的构建,但过程仍然过长,可以考虑减少运行的查询数量。默认查询套件会自动运行:它在质量和速度之间提供了最佳的折衷。

如果您使用 CodeQL 的高级设置,除了默认查询外,可能还会运行额外的查询或查询套件。检查工作流是否通过 queries 元素定义了额外的查询套件或查询。您可以尝试禁用这些额外的查询套件或查询。更多信息,请参阅 代码扫描工作流配置选项

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