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 捆绑包的全部内容提供给要运行 CodeQL code scanning 分析的每个 CI 服务器。 有关详细信息,请参阅“设置 CodeQL CLI”。

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

分析代码

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

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

如果使用 CodeQL CLI,则首先需要通过代码创建 CodeQL 数据库,然后分析数据库以生成 SARIF 结果。 有关详细信息,请参阅 为 CodeQL 分析准备代码使用 CodeQL 查询分析代码

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

无论使用 CodeQL CLI、REST API 还是其他方法,每个 CI 服务器都需要一个 GitHub App 或 personal access token 来将结果上传到 GitHub。 必须使用具有 security_events 写入权限的访问令牌或 GitHub App。 如果 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 上传指定类别的方式因分析方法而异。