Skip to main content

Поддержка этой версии GitHub Enterprise была прекращена 2023-01-18. Исправления выпускаться не будут даже при критических проблемах безопасности. Для повышения производительности, укрепления безопасности и новых функций установите последнюю версию GitHub Enterprise. Чтобы получить справку по обновлению, обратитесь в службу поддержки GitHub Enterprise.

Настройка рабочего процесса CodeQL для скомпилированных языков

Вы можете настроить, как GitHub использует CodeQL analysis workflow для сканирования кода, написанного на скомпилированных языках, на наличие уязвимостей и ошибок.

Who can use this feature

If you have write permissions to a repository, you can configure code scanning for that repository.

Code scanning доступно в репозиториях, принадлежащих организациям, в GitHub Enterprise Server. Для этой функции требуется лицензия на GitHub Advanced Security. Дополнительные сведения см. в разделе Сведения о GitHub Advanced Security.

Примечание: Администратор сайта должен включить code scanning для your GitHub Enterprise Server instance, прежде чем вы сможете использовать эту функцию. Если вы хотите использовать GitHub Actions для сканирования кода, администратор сайта также должен включить GitHub Actions и настроить необходимую инфраструктуру. Дополнительные сведения см. в разделе Настройка code scanning для устройства.

Сведения о CodeQL analysis workflow и скомпилированных языках

Настройте GitHub, чтобы использовать code scanning для своего репозитория, добавив в репозиторий рабочий процесс GitHub Actions. Для CodeQL code scanning добавьте CodeQL analysis workflow. Дополнительные сведения см. в разделе Настройка code scanning для репозитория.

Как правило, изменять созданный файл рабочего процесса для code scanningне требуется. Однако при необходимости можно настроить некоторые параметры рабочего процесса. Например, можно изменить GitHub CodeQL analysis workflow, чтобы указать частоту сканирования, языки или каталоги для сканирования, а также то, что CodeQL code scanning ищет в коде. Если для компиляции кода используется определенный набор команд, может потребоваться изменить CodeQL analysis workflow. Общие сведения о настройке code scanning и изменении файлов рабочего процесса см. в разделах Настройка code scanningи Learn GitHub Actions.

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

Code scanning выполняет запросы к одной или нескольким базам данных. Каждая база данных содержит представление всего кода на одном языке в репозитории. Для скомпилированных языков C/C++, C#, и Java процесс заполнения этой базы данных включает сборку кода и извлечение данных. Для этих языков CodeQL анализирует созданные исходные файлы в репозитории. Для любого из этих языков можно отключить autobuild и вместо этого использовать пользовательские команды сборки, чтобы анализировать только файлы, созданные с помощью этих пользовательских команд.

Для поддерживаемых скомпилированных языков можно использовать autobuild действие в CodeQL analysis workflow для сборки кода. Это позволяет избежать необходимости указывать явные команды сборки для C/C++, C#, и Java.

Если рабочий процесс использует таблицу language, autobuild пытается собрать каждый из компилируемых языков, перечисленных в матрице. Если вы не используете таблицу, autobuild попытается выполнить сборку на поддерживаемом компилируемом языке с наибольшим числом исходных файлов в репозитории. За исключением Go, анализ других компилируемых языков в репозитории завершится ошибкой, если вы не предоставите команды сборки в явном виде.

Примечание. Если для GitHub Actions используются локальные средства выполнения тестов, может потребоваться установить дополнительное программное обеспечение для использования процесса autobuild. Кроме того, что если для вашего репозитория требуется определенная версия инструмента сборки, вам может потребоваться сначала установить его вручную. Дополнительные сведения см. в статье Спецификации для средств выполнения тестов, размещенных на GitHub.

C/C++

Поддерживаемый тип системыИмя системы
Операционная системаWindows, macOS и Linux
Система сборкиWindows: MSbuild и скрипты сборки
Linux и macOS: Autoconf, Make, CMake, qmake, Meson, Waf, SCons, Linux Kbuild и скрипты сборки

Поведение шага autobuild зависит от операционной системы, в которой выполняется извлечение. В Windows шаг autobuild пытается выполнить автоматическое определение подходящего метода сборки для C/C++ с помощью следующего подхода:

  1. Вызов MSBuild.exe для файла решения (.sln) или проекта (.vcxproj), ближайшего к корневому каталогу. Если autobuild обнаруживает несколько файлов решения или проекта с одной и той же (самой короткой) глубиной относительно каталога верхнего уровня, он попытается собрать все из них.
  2. Вызов скрипта, который похож на скрипт сборки — build.bat, build.cmd и build.exe (в этом порядке).

На Linux и macOS шаг autobuild проверяет наличие файлов в репозитории, чтобы определить используемую систему сборки:

  1. Поиск системы сборки в корневом каталоге.
  2. Если она не будет найдена, выполняется поиск по подкаталогам уникального каталога с системой сборки для C/C++.
  3. Выполнение соответствующей команду, чтобы настроить систему.

C#

Поддерживаемый тип системыИмя системы
Операционная системаWindows и Linux
Система сборки.NET и MSbuild, а также скрипты сборки

Процесс autobuild пытается выполнить автоматическое определение подходящего метода сборки для C# с помощью следующего подхода:

  1. Вызов dotnet build для файла решения (.sln) или проекта (.csproj), ближайшего к корневому каталогу.
  2. Вызов MSbuild (Linux) или (Windows) для файла решения (MSBuild.exe) или проекта, ближайшего к корневому каталогу. Если autobuild обнаруживает несколько файлов решения или проекта с одной и той же (самой короткой) глубиной относительно каталога верхнего уровня, он попытается собрать все из них.
  3. Вызов скрипта, который выглядит как скрипт сборки —build и build.sh (в этом порядке для Linux) или build.bat, build.cmd и build.exe (в этом порядке для Windows).

Java

Поддерживаемый тип системыИмя системы
Операционная системаWindows, macOS и Linux (без ограничений)
Система сборкиGradle, Maven и Ant

Процесс autobuild пытается определить систему сборки для баз кода Java, применяя следующую стратегию:

  1. Поиск файла сборки в корневом каталоге. Проверка наличия файлов сборки Gradle, затем Maven, а затем Ant.
  2. Запуск первого найденного файла сборки. Если присутствуют файлы и Gradle, и Maven, используется файл Gradle.
  3. В противном случае выполняется поиск файлов сборки в непосредственных подкаталогах корневого каталога. Если только один подкаталог содержит файлы сборки, запускается первый файл, определенный в этом подкаталоге (используя тот же приоритет, что и для 1). Если несколько подкаталогов содержат файлы сборки, возникает об ошибка.

Добавление шагов сборки для компилируемого языка

В autobuild случае сбоя или анализа набора исходных файлов, отличных от созданных процессом autobuild , необходимо удалить autobuild шаг из рабочего процесса и вручную добавить шаги сборки. Для проектов C/C++, C#, Go, и Java CodeQL будет анализировать любой исходный код, созданный указанными шагами сборки. Сведения о том, как изменить файл рабочего процесса, см. в разделе Настройка code scanning.

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

- run: |
    make bootstrap
    make release

Дополнительные сведения о ключевом слове run см. в статье Синтаксис рабочего процесса для GitHub Actions.

Если репозиторий содержит несколько компилируемых языков, можно указать команды сборки для конкретного языка. Например, если репозиторий содержит C/C++, C# и Java и autobuild правильно собирает C/C++ и C#, но сборка Java завершается сбоем, можно использовать в рабочем процессе приведенную ниже конфигурацию после шага init. В ней указываются шаги сборки для Java, а для C/C++ и C# по-прежнему используется autobuild:

- if: matrix.language == 'cpp' || matrix.language == 'csharp'
  name: Autobuild
  uses: github/codeql-action/autobuild@v1

- if: matrix.language == 'java'
  name: Build Java
  run: |
    make bootstrap
    make release

Дополнительные сведения об условном операторе if см. в статье Синтаксис рабочего процесса для GitHub Actions.

Дополнительные советы и рекомендации, если autobuild не собирает ваш код, см. в статье Устранение неполадок рабочего процесса CodeQL.

Если вы добавили шаги сборки вручную для скомпилированных языков, а code scanning по-прежнему не работают в репозитории, обратитесь в your site administrator.