注意:网站管理员必须为 你的 GitHub Enterprise Server 实例 启用 code scanning,然后你才能使用此功能。 有关详细信息,请参阅“为设备配置代码扫描”。
如果企业所有者在企业级别设置了策略,则你可能无法启用或禁用 code scanning。 有关详细信息,请参阅“强制实施企业的代码安全性和分析策略”。
关于将 CodeQL CLI 用于 code scanning
可以使用 CodeQL CLI 在第三方持续集成 (CI) 系统中处理的代码上运行 code scanning。 Code scanning 是一项功能,可用于分析 GitHub 仓库中的代码,以查找安全漏洞和编码错误。 分析发现的任何问题都显示在 GitHub Enterprise Server 中。 有关信息,请参阅“关于使用 CodeQL 进行代码扫描”。 有关运行 CodeQL 分析的建议规范(RAM、CPU 核心和磁盘),请参阅“推荐用于运行 CodeQL 的硬件资源”。
CodeQL CLI 是一个可用来分析代码的独立产品。 其主要用途是生成代码空间的数据库表示形式,即 CodeQL 数据库。 数据库准备就绪后,你可以进行交互式查询,或者运行一系列查询以生成一组 SARIF 格式的结果,然后将结果上传到 你的 GitHub Enterprise Server 实例。
您也可以使用 GitHub Actions 在 GitHub Enterprise Server 中运行 code scanning。 有关 code scanning 使用操作的信息,请参阅“为存储库配置代码扫描”。 有关 CI 系统选项的概述,请参阅“关于 CI 系统中的 CodeQL 代码扫描”。
注意:
-
CodeQL CLI 可用于拥有 Advanced Security 许可证的客户。
-
CodeQL CLI 当前与非 glibc Linux 发行版不兼容,例如(基于 musl 的)Alpine Linux。
下载 CodeQL CLI
应从 https://github.com/github/codeql-action/releases 下载 CodeQL 包。 该捆绑包中包含:
- CodeQL CLI 产品
- 来自 https://github.com/github/codeql 的查询和库的兼容版本
- 捆绑包中包含的所有查询的预编译版本
您应该始终使用 CodeQL 包,因为这样可以确保兼容性,并且比单独下载 CodeQL CLI 和检出 CodeQL 查询提供更好的性能。 如果只在一个特定平台上运行 CLI,请下载相应的 codeql-bundle-PLATFORM.tar.gz
文件。 此外,也可以下载包含所有受支持平台的 CLI 的 codeql-bundle.tar.gz
。
在 CI 系统中设置 CodeQL CLI
您需要将 CodeQL CLI 包的全部内容提供给要运行 CodeQL code scanning 分析的每个 CI 服务器。 例如,您可以配置每台服务器从中央内部位置复制包并提取它。 或者,您可以使用 REST API 直接从 GitHub 获取包,以确保您从查询的最新改进中受益。 CodeQL CLI 的更新每 2-3 周发布一次。 例如:
$ wget https://HOSTNAME/github/codeql-action/releases/latest/download/codeql-bundle-linux64.tar.gz
$ tar -xvzf ./codeql-bundle-linux64.tar.gz
提取 CodeQL CLI 包后,可以在服务器上运行 codeql
可执行文件:
-
通过执行
/<extraction-root>/codeql/codeql
,其中<extraction-root>
是要在其中提取 CodeQL CLI 包的文件夹。 -
通过将
/<extraction-root>/codeql
添加到PATH
,这样就可以像codeql
一样运行可执行文件。
如果使用 CodeQL CLI 分析用 Python 编写的代码,则必须确保 CI 系统安装了 Python 3。
测试 CodeQL CLI 配置
提取 CodeQL CLI 包后,你可以运行以下命令来验证是否正确配置了 CLI 以创建和分析数据库。
codeql resolve qlpacks
如果/<extraction-root>/codeql
位于PATH
。- 否则为
/<extraction-root>/codeql/codeql resolve qlpacks
。
从成功的输出提取:
codeql/cpp-all (/<extraction-root>/qlpacks/codeql/cpp-all/<version>)
codeql/cpp-examples (/<extraction-root>/qlpacks/codeql/cpp-examples/<version>)
codeql/cpp-queries (/<extraction-root>/qlpacks/codeql/cpp-queries/<version>)
codeql/csharp-all (/<extraction-root>/qlpacks/codeql/charp-all/<version>)
codeql/csharp-examples (/<extraction-root>/qlpacks/codeql/charp-examples/<version>)
codeql/csharp-queries (/<extraction-root>/qlpacks/codeql/charp-queries/<version>)
codeql/java-all (/<extraction-root>/qlpacks/codeql/java-all/<version>)
codeql/java-examples (/<extraction-root>/qlpacks/codeql/java-examples/<version>)
codeql/java-queries (/<extraction-root>/qlpacks/codeql/java-queries/<version>)
codeql/javascript-all (/<extraction-root>/qlpacks/codeql/javascript-all/<version>)
codeql/javascript-examples (/<extraction-root>/qlpacks/codeql/javascript-examples/<version>)
codeql/javascript-queries (/<extraction-root>/qlpacks/codeql/javascript-queries/<version>)
codeql/python-all (/<extraction-root>/qlpacks/codeql/python-all/<version>)
codeql/python-examples (/<extraction-root>/qlpacks/codeql/python-examples/<version>)
codeql/python-queries (/<extraction-root>/qlpacks/codeql/python-queries/<version>)
codeql/ruby-all (/<extraction-root>/qlpacks/codeql/ruby-all/<version>)
codeql/ruby-examples (/<extraction-root>/qlpacks/codeql/ruby-examples/<version>)
codeql/ruby-queries (/<extraction-root>/qlpacks/codeql/ruby-queries/<version>)
...
您应该检查输出是否包含预期的语言,以及 qlpack 文件的目录位置是否正确。 位置应在提取的 CodeQL CLI 包内,如上图所示为 <extraction root>
,除非使用的是 github/codeql
的签出。 如果 CodeQL CLI 找不到预期语言的 qlpacks,请检查您是否下载了 CodeQL 捆绑包,而不是 CodeQL CLI 的独立副本。
使用 GitHub Enterprise Server 生成用于身份验证的令牌
每个 CI 服务器都需要 GitHub App 或用于 CodeQL CLI 的 personal access token,才能将结果上传到 GitHub Enterprise Server。 必须使用具有 security_events
写入权限的访问令牌或 GitHub App。 如果CI 服务器已使用具有此作用域的令牌从 GitHub Enterprise Server 检出仓库, 您可以允许 CodeQL CLI 使用相同的令牌。 否则,应创建具有 security_events
写入权限的新令牌,然后将其添加到 CI 系统的机密存储中。 有关信息,请参阅“创建 GitHub 应用”和“创建个人访问令牌”。
后续步骤
您现在可以配置 CI 系统运行 CodeQL 分析、生成结果并上传到 GitHub Enterprise Server,在那里结果将匹配分支或拉取请求并显示为 code scanning 警报。 有关详细信息,请参阅“在 CI 系统中配置 CodeQL CLI”。