某些用户更喜欢直接使用 CodeQL 查询源,以便处理或参与开放源代码共享查询。
1. 下载 CodeQL CLI tar 存档
CodeQL CLI 下载包是一个 zip 存档,其中包含工具、脚本和特定于 CodeQL 的各种文件。 如果没有 GitHub Enterprise 许可证,那么下载此存档即表示你同意 GitHub CodeQL 条款和条件。
应从 https://github.com/github/codeql-action/releases 下载 CodeQL 包。 该捆绑包中包含:
- CodeQL CLI 产品
- 来自 https://github.com/github/codeql 的查询和库的兼容版本
- 捆绑包中包含的所有查询的预编译版本
注意
对于 GitHub Enterprise Server 3.18,我们建议使用 CodeQL CLI 版本 2.21.4。
应该始终使用 CodeQL 捆绑包。 这样可以确保兼容性,并且比单独下载 CodeQL CLI 和检出 CodeQL 查询提供更好的性能。 如果只在一个特定平台上运行 CLI,请下载相应的 codeql-bundle-PLATFORM.tar.zst 文件。 此外,也可以下载包含所有受支持平台的 CLI 的 codeql-bundle.tar.zst。
捆绑包还有 tar.gz 变体,这些变体与 tar.zst 变体相同,但使用效率较低的 gzip 算法进行压缩。 下载 tar.gz 变体的唯一原因是使用不支持 Zstandard 压缩算法的较旧解压缩工具。
2. 创建新的 CodeQL 目录
创建一个新目录,可在其中放置 CLI 以及要使用的任何查询和库。 例如,。
CLI 的内置搜索操作会自动在其所有同级目录中查找用于数据库创建和分析的文件。 将这些组件保留在自己的目录中可以防止 CLI 搜索不相关的同级目录,同时确保所有文件都可用,而无需在命令行上指定任何其他选项。
3. 获取 CodeQL 查询的本地副本
CodeQL 存储库包含对所有支持的语言进行 CodeQL 分析所需的查询和库。 将此存储库的副本克隆到 。
默认情况下,克隆存储库的根称为 。 重命名此文件夹 可避免与将在步骤 1 中提取的 CodeQL CLI 发生冲突。 如果在命令行上使用 git,则可以通过在 文件夹中运行 来一步克隆和重命名存储库。
在此存储库中,查询和库组织成 CodeQL 包。 除了查询本身,CodeQL 包还包含重要的元数据,这些元数据指示 CodeQL CLI 如何处理查询文件。 有关详细信息,请参阅“AUTOTITLE”。
注意
针对不同用户提供了不同版本的 CodeQL 查询。 查看用例的正确版本:
- 对于旨在与最新的 CodeQL CLI 版本一起使用的查询,请查看标记为 的分支。 对于使用 CodeQL CLI 构建或最近从 GitHub 下载的数据库,应使用此分支。
- 有关最新的 CodeQL 查询,请查看 分支。 此分支表示最新版本的 CodeQL 的分析。
4. 提取 CodeQL CLI tar 存档
将 tar 存档提取到你在步骤 2 中创建的目录中。
例如,如果 CodeQL 存储库副本的路径为 ,则将 CLI 提取到 。
5. 启动
提取后,可以通过多种方式运行 codeql 可执行文件来运行 CodeQL 进程:
- 通过执行
<extraction-root>/codeql/codeql,其中<extraction-root>是要在其中提取 CodeQL CLI 包的文件夹。 - 通过将
<extraction-root>/codeql添加到PATH,这样就可以像codeql一样运行可执行文件。
此时,可以执行 CodeQL 命令。 有关 CodeQL CLI 命令的完整列表,请参阅“CodeQL CLI 命令手册”。
6. 验证 CodeQL CLI 设置
CodeQL CLI 具有可执行的子命令,可以验证是否已正确进行设置以创建和分析数据库:
- 运行 以显示可用于数据库创建的语言。 这将列出 CodeQL CLI 包中默认支持的语言。
- 运行 以显示 CLI 可以找到的 CodeQL 包。 这将显示直接可供 CodeQL CLI 使用的所有 CodeQL 包的名称。 这应包括:
- 每种支持的语言的查询包,例如 。 这些包包含将针对每个分析运行的标准查询。
- 每种受支持语言的库包,例如 。 这些包包含查询库,例如控制流和数据流库,它们可能对查询编写器很有用。
- 每种支持语言的示例包,例如 。 这些包包含可能对查询编写者很有用的 CodeQL 代码片段。
- 确保使用旧产品创建的自定义查询和库的旧包与 CodeQL 版本兼容。