Примечание.
Администратор сайта должен включить code scanning перед использованием этой функции. Если вы хотите использовать GitHub Actions для сканирования кода, администратор сайта также должен включить GitHub Actions и настроить необходимую инфраструктуру. Дополнительные сведения см. в разделе Настройка сканирования кода для устройства.
Сравните режимы сборки
| Характеристика режима сборки | Нет | Автострока | Руководство |
|---|---|---|---|
| Используется по умолчанию для настройки и включения на уровне организации | Да (C# and Java) | Да, где none не поддерживается | Нет |
| Анализ успешно выполняется без настройки пользователя | Да | Variable | Нет |
| Полнота анализа | Созданный код не анализируется | Variable | Контролируемый пользователем |
| Точность анализа | Хорошо | Хорошо | Лучший |
Выберите режим строительства
Когда вы настраиваете code scanning его впервые или в нескольких репозиториях, лучше всего использовать стандартную конфигурацию. Настройка по умолчанию использует самый простой способ создания CodeQL базы данных и анализа кода, чтобы вы могли как можно скорее исправить оповещения. После разрешения начальных оповещений может потребоваться перейти на расширенную настройку с помощью процесса сборки вручную для репозиториев с высоким риском.
Для поведения, специфичного autobuild для языка, требований к раннеру и деталям режима сборки для скомпилированных языков см. Опции и шаги сборки CodeQL для скомпилированных языков.
Используйте несколько режимов сборки в многоязычном репозитории
Для репозиториев с несколькими скомпилированных языков можно использовать различные режимы сборки для разных языков. Например, если в вашем репозитории есть C/C++, C# и Java, возможно, стоит указать ручные этапы сборки для одного языка (здесь C/C++). Этот рабочий процесс задает другой режим сборки для каждого языка.
strategy:
matrix:
include:
# Analyzes C and C++ code using the commands in `Build C and C++ code`
- language: c-cpp
build-mode: manual
# Analyzes C# code by automatically detecting a build
- language: csharp
build-mode: autobuild
# Analyzes Java code directly from the codebase without a build
- language: java-kotlin
build-mode: none # analyzes Java only
steps:
- name: Checkout repository
uses: actions/checkout@v5
# Initializes CodeQL tools and creates a codebase for analysis.
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
- if: ${{ matrix.build-mode == 'manual' }}
name: Build C and C++ code
run: |
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
echo ' make bootstrap'
echo ' make release'
exit 1
Для получения информации о языках, библиотеках и фреймворках, поддерживаемых в последней версии CodeQL, см. раздел «Поддерживаемые языки и фреймворки » в CodeQL документации. Для получения информации о системных требованиях для запуска последней версии CodeQL, см. раздел Системные требования в CodeQL документации.
Включить кэширование зависимостей для CodeQL
Для рабочих процессов настройки по умолчанию кэширование зависимостей включено только для GitHub-hosted runners в публичных и приватных репозиториях.
Для рабочих процессов расширенной установки кэширование зависимостей по умолчанию отключено. Чтобы включить кэш зависимостей, CodeQLиспользуйте dependency-caching параметр действия CodeQL в вашем расширенном рабочем процессе настройки. Этот параметр принимает следующие значения:
-
`false` / `none` / `off`: кэширование зависимостей отключено (по умолчанию) -
`restore`: восстановление существующих кэшей не сохраняет новые кэши. -
`store`: не сохраняйте только новые кэши, не восстанавливайте существующие кэши -
`true` / `full` / `on`: восстановление существующих кэшей и хранение новых кэшей
Например, следующие настройки позволят кэшировать зависимости для действия CodeQL :
# Initializes CodeQL with dependency caching enabled
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: java
dependency-caching: true
Используйте none режим сборки для CodeQL
Для C# and Java, CodeQL создаёт базу данных без необходимости сборки, когда вы включите настройки по умолчанию , code scanning если только репозиторий не содержит также код Kotlin. Если репозиторий содержит код Kotlin, помимо Java-кода, настройка по умолчанию включена с процессом автосборки, поскольку анализ Kotlin требует сборки.
Создание базы CodeQL данных без сборки может дать менее точные результаты, чем использование autobuild или ручные шаги сборки, если:
- Скрипты сборки не могут запрашиваться для сведений о зависимостях, а предположения зависимостей являются неточными.
- Репозиторий обычно создает код во время процесса сборки.
Для использования или ручной сборки можно использовать autobuild расширенную настройку.
Примечание.
Для Java анализа, если build-mode установлен в none и код Kotlin находится в репозитории, код Kotlin не будет проанализирован и будет выпущено предупреждение. См . раздел AUTOTITLE.
Использование autobuild для CodeQL
Действие CodeQL используется autobuild для анализа скомпилированных языков в следующих случаях.
- Настройка по умолчанию включена, и язык не поддерживает
noneсборку (поддерживается для C# and Java). - Расширенная настройка включена, а рабочий процесс указывает
build-mode: autobuild. - Расширенная настройка включена, и рабочий процесс имеет шаг автостроки для языка с помощью
autobuildдействия (github/codeql-action/autobuild@v4).
Использование параметра build-mode
# Initializes the CodeQL tools for scanning.
name: Analyze
strategy:
matrix:
include:
# Analyze C and C++ code
- language: c-cpp
build-mode: autobuild
# Analyze Go code
- language: go
build-mode: autobuild
steps:
- uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
Используйте шаг автосборки
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
- name: Autobuild
uses: github/codeql-action/autobuild@v4
Указывайте шаги сборки вручную
Вы можете указать только шаги сборки вручную, если вы включили расширенную настройку, см. раздел Настройка расширенной настройки для сканирования кода.
Если autobuild не удается выполнить анализ другого набора исходных файлов, созданных этим autobuild процессом, необходимо выполнить следующие действия:
- Если рабочий процесс задает режим сборки для языка, измените режим
manualсборки на . - Если рабочий
autobuildпроцесс содержит шаг, удалите или закомментируйтеautobuildшаг в рабочем процессе.
Затем раскомментируйте run шаг и вручную укажите процесс сборки для использования. Для C/C++, C#, Go, Java, Kotlin и Swift, CodeQL проанализирует любой исходный код, собранный указанными вами шагами сборки.
Обновите рабочий процесс, чтобы определить как build-mode``manual.
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
build-mode: manual
- uses: github/codeql-action/analyze@v4
with:
category: "/language:${{ matrix.language }}"
Кроме того, обновите рабочий процесс, чтобы закомментировать шаг "Autobuild".
# Autobuild attempts to build any compiled languages.
# - name: Autobuild
# uses: github/codeql-action/autobuild@v4
Добавить команды сборки
Если сборка вручную включена, раскомментируйте run шаг в рабочем процессе и добавьте команды сборки, подходящие для репозитория. На run шаге выполняются программы командной строки с помощью оболочки операционной системы. Вы можете изменить эти команды и добавить дополнительные команды для настройки процесса сборки.
- run: |
make bootstrap
make release
Дополнительные сведения о ключевом слове run см. в разделе Синтаксис рабочего процесса для GitHub Actions.
Если вы добавили ручные этапы сборки для скомпилированных языков и code scanning всё равно не работает в вашем репозитории, свяжитесь ваш администратор сайтас .