Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.

Сведения о рабочих областях CodeQL

Рабочие области CodeQL позволяют разрабатывать и поддерживать группы пакетов CodeQL, которые зависят друг от друга.

GitHub CodeQL лицензируется на уровне пользователя после установки. CodeQL можно использовать только для определенных задач в соответствии с лицензионными ограничениями. Дополнительные сведения см. в разделе Сведения о лицензии GitHub CodeQL.

Если у вас есть учетная запись GitHub Enterprise и лицензия на GitHub Advanced Security, вы можете использовать CodeQL для автоматического анализа, непрерывной интеграции и непрерывной поставки. Вы можете создать корпоративную учетную запись, обратившись в отдел продаж. Дополнительные сведения см. в разделе Сведения о GitHub Advanced Security.

Примечание: Эта статья была перенесена с веб-сайта документации По CodeQL в январе 2023 г.

Сведения о рабочих областях CodeQL

Вы используете рабочую область CodeQL, если хотите сгруппировать несколько пакетов CodeQL. Типичным вариантом использования рабочей области CodeQL является разработка набора библиотек CodeQL и пакетов запросов, которые являются взаимозависимыми. Дополнительные сведения о пакетах CodeQL см. в разделе Сведения о пакетах CodeQL.

Основное преимущество рабочей области CodeQL заключается в том, что она упрощает разработку и обслуживание нескольких пакетов CodeQL. При использовании рабочей области CodeQL все пакеты CodeQL в рабочей области доступны в качестве исходных зависимостей друг для друга при выполнении команды CodeQL, которая разрешает запросы. Это упрощает разработку, обслуживание и публикацию нескольких связанных пакетов CodeQL.

В большинстве случаев следует хранить рабочую область CodeQL и содержащиеся в ней пакеты CodeQL в одном репозитории Git. Это упрощает совместное использование среды разработки CodeQL.

Файл codeql-workspace.yml

Рабочая область CodeQL определяется yaml-файлом codeql-workspace.yml . Этот файл содержит provide блок и при необходимости ignore блоки и registries .

  • Блок provide содержит список стандартных шаблонов, определяющих пакеты CodeQL, доступные в рабочей области.

  • Блок ignore содержит список стандартных шаблонов, определяющих пакеты CodeQL, недоступные в рабочей области.

  • Блок registries содержит список URL-адресов GHES и шаблонов пакетов, которые определяют, какой реестр контейнеров используется для публикации пакетов CodeQL. Дополнительные сведения см. в разделе Публикация и использование пакетов CodeQL.

Каждая запись в provide разделе или ignore должна сопоставляться с расположением qlpack.yml файла. Все стандартные шаблоны определяются относительно каталога, содержащего файл рабочей области. Список шаблонов, принятых в этом файле, см. в разделе .@actions/glob

Например, следующий codeql-workspace.yml файл определяет рабочую область, содержащую все пакеты CodeQL, которые рекурсивно находятся в codeql-packs каталоге, за исключением пакетов в каталоге experimental . Блок registries указывает, что codeql/\* пакеты следует скачивать из https://ghcr.io/v2/, который является реестром контейнеров по умолчанию GitHub. Все остальные пакеты должны быть загружены из и опубликованы в реестре по адресу GHE_HOSTNAME.

provide:
  - "*/codeql-packs/**/qlpack.yml"
ignore:
  - "*/codeql-packs/**/experimental/**/qlpack.yml"

registries:
 - packages: 'codeql/*'
   url: https://ghcr.io/v2/

 - packages: '*'
   url: https://containers.GHE_HOSTNAME/v2/

Чтобы убедиться, что файл codeql-workspace.yml содержит ожидаемые пакеты CodeQL, выполните codeql pack ls команду в том же каталоге, что и рабочая область. Результатом выполнения команды является список всех пакетов CodeQL в рабочей области.

Исходные зависимости

Исходные зависимости — это пакеты CodeQL, которые разрешаются из локальной файловой системы за пределами кэша пакетов CodeQL. Эти зависимости могут находиться в одной и той же рабочей области CodeQL или указываться в качестве параметра пути с помощью аргумента --additional-packs . При компиляции и выполнении запросов локально исходные зависимости переопределяют все зависимости, обнаруженные в кэше пакетов CodeQL, а также ограничения версий, определенные в qlpack.yml. Все ссылки на пакеты CodeQL в одной рабочей области разрешаются как исходные зависимости.

Это особенно полезно в следующих ситуациях:

  • Одна из зависимостей выполняемого пакета запросов еще не опубликована. Разрешение из источника — единственный способ ссылаться на этот пакет.

  • Вы вносите изменения в несколько пакетов одновременно и хотите протестировать их вместе. Разрешение из источника гарантирует, что вы используете версию пакета с изменениями в нем.

Рабочие области и разрешение запросов CodeQL

Все пакеты CodeQL в рабочей области доступны в качестве исходных зависимостей друг для друга при выполнении любой команды CodeQL, которая разрешает запросы или пакеты. Например, при запуске codeql pack install в каталоге пакета в рабочей области любая зависимость, которую можно найти в рабочей области, будет использоваться вместо загрузки этой зависимости в кэш пакетов и добавления ее codeql-pack.lock.yml в файл. Дополнительные сведения см. в разделе Создание пакетов CodeQL и работа с ними.

Аналогичным образом, при публикации пакета запросов CodeQL в реестре контейнеров GitHub с помощью codeql pack publish команды всегда будут использоваться зависимости из рабочей области вместо зависимостей, найденных в локальном кэше пакетов.

Это гарантирует, что все локальные изменения, внесенные в библиотеку запросов в зависимости, автоматически отражаются во всех пакетах запросов, публикуемых из этой рабочей области.

Пример

Рассмотрим следующий файл codeql-workspace.yml :

provide:
  - "**/qlpack.yml"

И следующий файл пакета qlpack.yml библиотеки CodeQL в рабочей области:

name: my-company/my-library
library: true
version: 1.0.0

И следующий файл пакета qlpack.yml запросов CodeQL в рабочей области:

name: my-company/my-queries
version: 1.0.0
dependencies:
  my-company/my-library: "*"
  codeql/cpp-all: ~0.2.0

Обратите внимание, что dependencies блок для пакета my-company/my-queriesзапросов CodeQL указывает "*" в качестве версии пакета библиотеки. Так как пакет библиотеки уже определен как зависимость источника в codeql-workspace.yml, содержимое пакета библиотеки всегда разрешается из рабочей области. В этом случае любое ограничение версии будет игнорироваться. Мы рекомендуем использовать "*" для исходных зависимостей, чтобы было ясно, что версия наследуется от рабочей области.

При выполнении codeql pack install из каталога пакета запросов в локальный codeql/cpp-all кэш пакетов загружается соответствующая версия . Кроме того, codeql-pack.lock.yml создается файл, содержащий разрешенную версию codeql/cpp-all. Файл блокировки не будет содержать запись для , my-company/my-library так как он разрешается из исходных зависимостей. Файл codeql-pack.lock.yml будет выглядеть примерно так:

dependencies:
  codeql/cpp-all:
    version: 0.2.2

При выполнении codeql pack publish из каталога codeql/cpp-all пакета запросов зависимости из кэша пакетов и my-company/my-library из рабочей области объединяются и my-company/my-queries публикуются в реестре контейнеров GitHub.