Skip to main content

在现有 CI 系统上使用代码扫描

可以使用 CodeQL CLI 或第三方持续集成系统中的其他工具分析代码,并将结果上传到 GitHub。 生成的 code scanning 警报与 GitHub 中生成的任何警报一起显示。

谁可以使用此功能?

具有写入访问权限的用户

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

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

注意

网站管理员必须启用 code scanning,然后你才能使用此功能。 有关详细信息,请参阅“为设备配置代码扫描”。

如果企业所有者在企业级别设置了 GitHub Code Security 策略,则你可能无法启用或禁用 code scanning。 有关详细信息,请参阅“强制实施企业的代码安全性和分析策略”。

有别于在GitHub中使用GitHub Actions运行code scanning的方法,可以在外部持续集成或持续交付/部署(CI/CD)系统中分析代码,然后将结果上传到GitHub。

注意

上传 SARIF 数据以显示为 GitHub 中的 code scanning 结果适用于启用了 GitHub Code Security 的组织拥有的仓库。 有关详细信息,请参阅“管理存储库的安全和分析设置”。

设置分析工具

首先需要下载所选分析工具,并使用 CI 系统进行设置。

如果使用CodeQL CLI,则需要将CodeQL CLI捆绑包的完整内容提供给您希望运行CodeQLcode scanning分析的每台CI服务器。 有关详细信息,请参阅“设置 CodeQL CLI”。

将分析工具提供给 CI 系统中的服务器后,即可生成数据。

分析代码

若要使用 CodeQL CLI 或其他分析工具分析代码,需要查看要分析和设置代码库环境的代码,确保任何依赖项都可用。 你可能还需要查找代码库的生成命令,通常提供在 CI 系统的配置文件中。

然后,你可以完成分析代码库并生成结果的步骤,这些步骤将因所使用的静态分析工具而异。

如果你正在使用CodeQL CLI,首先需要从代码中创建一个CodeQL数据库,然后分析该数据库以生成 SARIF 结果。 有关详细信息,请参阅 为 CodeQL 分析准备代码使用 CodeQL 查询分析代码

使用GitHub生成用于身份验证的令牌

每个 CI 服务器需要一个GitHub App或personal access token来将结果上传到GitHub,无论你使用的是CodeQL CLI、REST API还是其他方法。 必须使用访问令牌或 GitHub App 具有 security_events 写入权限。 如果 CI 服务器已使用此作用域的令牌签出来自GitHub的存储库,则您可能可以使用相同的令牌。 否则,应创建具有 security_events 写入权限的新令牌,然后将其添加到 CI 系统的机密存储中。 有关信息,请参阅 关于创建GitHub应用管理个人访问令牌

有关将结果 GitHub上传到的不同方法的详细信息,请参阅 将 SARIF 文件上传到 GitHub

将结果上传到 GitHub

分析代码后,生成了 SARIF 结果,并确保可以通过 GitHub 进行身份验证后,您可以将结果上传到 GitHub。 有关上传结果的不同方法的详细信息,请参阅 将 SARIF 文件上传到 GitHub

有关使用 CodeQL CLI 将结果上传到 GitHub 的具体信息,请参阅 将 CodeQL 分析结果上传到GitHub

默认情况下, code scanning 存储库的每个分析需要一个 SARIF 结果文件。 因此,当你上传第二个 SARIF 结果文件进行提交时,将被视为原始数据集的替换。 例如,如果分析工具为它分析的每种语言或使用的每个规则集生成不同的 SARIF 文件,则可能需要上传两个不同的 SARIF 文件以进行一次分析。 如果你想上传多组结果以在存储库中提交,则必须将每组结果标识为唯一的一组结果。 为 SARIF 上传指定类别的方式因分析方法而异。