在 GitHub Enterprise Server 上使用 CodeQL 包
默认情况下,CodeQL CLI 预期会下载 CodeQL 包,并将其发布到 Container registry 上的 GitHub.com。 但是,还可以通过在Container registryGitHub Enterprise Server中创建一个qlconfig.yml文件,告知 CLI 在每个包上使用哪个Container registry,以便处理CodeQL包。
使用首选文本编辑器在 Linux/MacOS 上创建 ~/.codeql/qlconfig.yml 文件或 %HOMEPATH%\.codeql\qlconfig.yml Windows,并添加条目以指定要用于一个或多个包名称模式的注册表。
例如,以下qlconfig.yml文件将所有包与Container registry在https://GHE_HOSTNAME相关联,但与codeql/\*匹配的包或属于other-org/*组织的除外,这些包与Container registry在GitHub.com相关联。
registries:
- packages:
- 'codeql/*'
- 'other-org/*'
# Container registry on GitHub.com
url: https://ghcr.io/v2/
- packages: '*'
# Container registry hosted at `https://GHE_HOSTNAME`
url: https://containers.GHE_HOSTNAME/v2/
通过在registries列表中查找第一个具备与该包名匹配的packages属性的项,CodeQL CLI将确定使用哪个注册表来处理给定包名。
这意味着,通常需要先定义最具体的包名称模式。
packages 属性可以是单个包名称、glob 模式,也可以是包名称和 glob 模式的 YAML 列表。
`registries` 列表也可以放在 `codeql-workspace.yml` 文件中。 这样做将允许定义要在特定工作区中使用的注册表,以便它可以在工作区的其他用户 CodeQL 之间共享。
`registries` 中的 `codeql-workspace.yml` 列表将与全局 `qlconfig.yml` 中的列表合并,并优先于后者。 有关 `codeql-workspace.yml` 的详细信息,请参阅 [AUTOTITLE](/code-security/codeql-cli/using-the-advanced-functionality-of-the-codeql-cli/about-codeql-workspaces#about-codeql-workspaces)。
现在可以使用 codeql pack publish、codeql pack download 和 codeql database analyze 在 GitHub Enterprise Server 上管理包。
认证到 GitHubContainer registries
通过对合适的GitHubContainer registry进行身份验证,可以发布包和下载私有包。
对 Container registries 进行身份验证于 GitHub.com
您可以使用两种方式对 Container registry 进行身份验证:
- 将
--github-auth-stdin选项传递给CodeQL CLI,然后通过标准输入提供GitHub Apps令牌或personal access token。 - 将
GITHUB_TOKEN环境变量设置为 GitHub Apps 令牌或 personal access token。
在 GitHub Enterprise Server 上对 Container registries 进行身份验证
同样,您可以在GitHub Enterprise Server上向Container registry进行身份验证,或以两种方式同时向多个注册表进行身份验证(例如,从多个注册表下载或运行专用包):
- 将
--registries-auth-stdin选项传递给CodeQL CLI,然后通过标准输入提供注册表身份验证字符串。 - 将
CODEQL_REGISTRIES_AUTH环境变量设置为注册表身份验证字符串。
注册表身份验证字符串是由逗号分隔的<registry-url>=<token>对组成的列表,其中每对由一个URL例如registry-urlContainer registryhttps://containers.GHE_HOSTNAME/v2/和该token的一个GitHub Apps令牌或personal access token令牌Container registry组成。
这可确保每个令牌仅传递到您所指定的 Container registry。
例如,以下注册表身份验证字符串指定 CodeQL CLI 应按如下所示进行身份验证:
- 使用令牌
<token1>在 GitHub.com 上对 Container registry 进行身份验证。 - 使用令牌
<token2>向 Container registry 企业https://containers.GHE_HOSTNAME/v2/进行身份验证。
https://ghcr.io/v2/=<token1>,https://containers.GHE_HOSTNAME/v2/=<token2>
发布CodeQL包
若要与他人共享CodeQL包,可以将其发布到 。Container registry
在发布前配置 qlpack.yml 文件
注意
本文介绍了 GitHub Enterprise Server 3.15 的初始发行版中包含的 CodeQL CLI 2.18.4 捆绑包中可用的功能。
如果站点管理员已将 CodeQL CLI 版本更新为较新版本,请参阅本文的 GitHub Enterprise Cloud 版本,了解有关最新功能的信息。
在发布之前,可以检查和修改 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>`是包的名称。 -
最多只能选择
defaultSuite和defaultSuiteFile中的一个。 有两种不同的方法来定义要运行的默认查询套件,第一种是直接在 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)。