Skip to main content

发布及使用 CodeQL 包

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

谁可以使用此功能?

CodeQL 可用于以下存储库类型:

认证到 GitHubContainer registries

通过对合适的GitHubContainer registry进行身份验证,可以发布包和下载私有包。

您可以使用两种方式对 Container registry 进行身份验证:

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

发布CodeQL包

若要与他人共享CodeQL包,可以将其发布到 。Container registry

在发布前配置 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

当您准备好将包发布到 GitHubContainer registry 时,可以在包的根目录中运行以下命令:

codeql pack publish

已发布的包将显示在qlpack.yml文件中作用域指定的GitHub组织的包部分中。

注意

如果要将模型包 GitHubContainer registry 发布到组织中的所有存储库,以便扩展至默认设置配置的一部分,那么需要确保运行代码扫描的存储库可以访问这些模型包。 有关详细信息,请参阅 编辑默认设置配置配置包的访问控制和可见性

下载现有 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` 命令将其下载的包存储在不用于本地修改的内部位置。 如果在下载后修改包,可能会导致意外(且很难进行排除故障)的行为。 有关自定义包的详细信息,请参阅 [AUTOTITLE](/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/creating-and-working-with-codeql-packs)。