作为在 GitHub 内部使用 GitHub Actions 运行代码扫描的替代方案,您可以在外部持续集成或持续交付/部署(CI/CD)系统中分析代码,然后将结果上传至 GitHub。
注意
将 SARIF 数据上传以在 GitHub 中显示为代码扫描结果,已在启用 GitHub 代码安全的组织拥有的仓库以及 GitHub.com 上的公共仓库中得到支持。欲了解更多信息,请参阅 管理仓库的安全和分析设置。
设置分析工具
您首先需要下载所选的分析工具并在 CI 系统中进行设置。
如果您使用 CodeQL CLI,则需要将 CodeQL CLI 包的全部内容提供给您希望运行 CodeQL 代码扫描分析的每台 CI 服务器。有关详细信息,请参阅 设置 CodeQL CLI。
一旦您已在 CI 系统的服务器上提供了分析工具,即可开始生成数据。
分析代码
要使用 CodeQL CLI 或其他分析工具分析代码,您需要检出要分析的代码并设置代码库环境,确保所有依赖项均可用。您可能还需要查找代码库的构建命令,这通常可以在 CI 系统的配置文件中找到。
然后,您可以完成分析代码库并生成结果的步骤,具体流程取决于所使用的静态分析工具。
如果您使用 CodeQL CLI,则首先需要从代码中创建一个 CodeQL 数据库,然后分析该数据库以生成 SARIF 结果。有关详细信息,请参阅 准备代码以进行 CodeQL 分析和 使用 CodeQL 查询分析代码。
生成用于 GitHub 认证的令牌
每个 CI 服务器都需要使用 GitHub App 或个人访问令牌来上传结果到 GitHub,无论您使用的是 CodeQL CLI、REST API 还是其他方法。您必须使用具有 security_events 写入权限的访问令牌或 GitHub App。如果 CI 服务器已经使用具有此范围的令牌来检出 GitHub 上的仓库,您可以考虑复用该令牌。否则,您应创建一个具有 security_events 写入权限的新令牌,并将其添加到 CI 系统的机密存储中。有关信息,请参阅 关于创建 GitHub Apps和 管理个人访问令牌。
有关将结果上传至 GitHub 的不同方法的更多信息,请参阅 将 SARIF 文件上传到 GitHub。
将结果上传至 GitHub
在您完成代码分析、生成 SARIF 结果并确保能够使用 GitHub 进行身份验证后,即可将结果上传至 GitHub。有关可用的不同上传方法的更多信息,请参阅 将 SARIF 文件上传到 GitHub。
有关使用 CodeQL CLI 将结果上传至 GitHub 的具体细节,请参阅 将 CodeQL 分析结果上传到 GitHub。
默认情况下,代码扫描期望对每个仓库的每次分析仅有一个 SARIF 结果文件。因此,当您为同一次提交上传第二个 SARIF 文件时,它会被视为对原始数据集的替换。如果您的分析工具为每种分析的语言或每套使用的规则生成不同的 SARIF 文件,您可能需要为一次分析上传两个不同的 SARIF 文件。如果您希望为仓库中的一次提交上传多个结果集,则必须将每个结果集标识为唯一的集合。为 SARIF 上传指定类别的方式会因分析方法而异。