跳至主要内容

发布和使用 CodeQL 包

共享或下载 CodeQL 包,然后分析您的 CodeQL 数据库。

谁可以使用此功能?

CodeQL 可用于以下仓库类型

登录 GitHub 容器注册表

您可以通过登录相应的 GitHub 容器注册表来发布包并下载私有包。

您可以通过两种方式登录容器注册表

  1. 向 CodeQL CLI 传递 --github-auth-stdin 选项,然后通过标准输入提供 GitHub Apps 令牌或个人访问令牌。
  2. GITHUB_TOKEN 环境变量设置为 GitHub Apps 令牌或个人访问令牌。

发布您的 CodeQL 包

要与他人共享您的 CodeQL 包,您可以将其发布到容器注册表。

在发布前配置 qlpack.yml 文件

您可以在发布前检查并修改 CodeQL 包的配置详情。在您喜欢的文本编辑器中打开 qlpack.yml 文件。

library: # set to true if the pack is a library. Set to false or omit for a query pack
name: <scope>/<pack>
version: <x.x.x>
description: <Description to publish with the package>
defaultSuite: # optional, one or more queries in the pack to run by default
    - query: <relative-path>/query-file>.ql
defaultSuiteFile: default-queries.qls # optional, a pointer to a query-suite in this pack
license: # optional, the license under which the pack is published
dependencies: # map from CodeQL pack name to version range
  • name: 必须遵循 <scope>/<pack> 格式,其中 <scope> 是您将发布到的 GitHub 组织,而 <pack> 是包的名称。

  • 最多只能使用 defaultSuitedefaultSuiteFile 中的一个。这是两种定义默认查询套件的方式:第一种是在 qlpack.yml 文件中直接指定查询,第二种是通过在包中指定查询套件。

运行 codeql pack publish

当您准备好将包发布到 GitHub 容器注册表时,您可以在包目录的根目录运行以下命令

codeql pack publish

已发布的包将在 qlpack.yml 文件中指定范围的 GitHub 组织的 Packages(软件包)部分显示。

注意

如果您将模型包发布到 GitHub 容器注册表,以在默认设置配置中扩展组织中所有仓库的覆盖范围,则需要确保运行代码扫描的仓库能够访问这些模型包。欲了解更多信息,请参阅 编辑默认设置的配置配置软件包的访问控制和可见性

下载现有的 CodeQL 包

要运行他人创建的包,您必须先通过运行以下命令下载它

codeql pack download <scope>/<pack>@x.x.x
  • <scope>:您将从中下载的 GitHub 组织名称。
  • <pack>:您想下载的包的名称。
  • @x.x.x:可选的版本号。如果省略,将下载最新版本。

此命令接受多个包的参数。

如果您编写脚本指定了要下载的查询包的特定版本号,请注意,当您将 CodeQL 升级到更高版本时,可能也需要切换到查询包的更新版本。使用已固定在非常旧版本的查询包时,较新的 CodeQL 版本可能会导致性能下降。欲了解更多信息,请参阅 CodeQL 查询包参考

使用 CodeQL 包分析 CodeQL 数据库

要使用 CodeQL 包分析 CodeQL 数据库,请运行以下命令

codeql database analyze <database> <scope>/<pack>@x.x.x:<path>
  • <database>:要分析的 CodeQL 数据库。
  • <scope>:发布该包的 GitHub 组织名称。
  • <pack>:您使用的包的名称。
  • @x.x.x:可选的版本号。如果省略,将使用最新版本。
  • :<path>:可选的查询、目录或查询套件的路径。如果省略,将使用包的默认查询套件。

analyze 命令将运行任何指定的 CodeQL 包的默认套件。您可以指定多个 CodeQL 包用于分析 CodeQL 数据库。例如

codeql <database> analyze <scope>/<pack> <scope>/<other-pack>

注意

codeql pack download 命令将下载的包存储在内部位置,该位置不用于本地修改。如果在下载后对包进行修改,可能会导致意外(且难以排查)的行为。如需了解更多关于自定义包的信息,请参阅 创建和使用 CodeQL 包

© . This site is unofficial and not affiliated with GitHub, Inc.