Устранение неполадок с результатами CodeQL
В этом уроке приведены советы по оптимизации и устранению неполадок при работе с CodeQL и сканированием кода.
Оптимизация сред выполнения анализа CodeQL
Существует несколько причин, по которым анализ CodeQL может занять слишком много времени:
- Если для анализа CodeQL используются автономные модули выполнения, можно увеличить память или количество ядер.
- Проблемы могут возникать, когда репозиторий содержит несколько языков. Вы можете изменить рабочий процесс, чтобы использовать матрицу, которая ускоряет анализ нескольких языков. Анализ каждого языка выполняется параллельно с рабочим процессом анализа CodeQL по умолчанию. Если они настроены для последовательной инициализации языка и анализа, вам может потребоваться аналогично настроить расширенные рабочие процессы.
- Объем кода, который вы анализируете, может привести к длительному времени выполнения. Время анализа обычно пропорционально объему анализируемого кода. Вы можете уменьшить размер кода, исключив тестовый код или разбив код в несколько рабочих процессов, чтобы проанализировать только подмножество с каждым сканированием.
- Может потребоваться активировать анализ события
scheduleтолько в том случае, если анализ слишком медленный во времяpushилиpull_requestсобытий.
Оптимизация запросов CodeQL
Некоторые проблемы с производительностью могут возникнуть из пользовательских запросов. Распространенные проблемы и способы их устранения можно найти в документации CodeQL по устранению неполадок с производительностью запросов.
Ниже приведены важные моменты, которые следует учитывать при работе с CodeQL и языком запросов QL:
- Предикаты и классы CodeQL оцениваются в таблицах базы данных. Крупные предикаты создают большие таблицы со многими строками, поэтому они дорогостоящи для вычислений.
- Язык QL реализуется с помощью стандартных операций базы данных и реляционной алгебры, таких как соединение, проекция и объединение.
- Запросы оцениваются снизу вверх, что означает, что предикат не вычисляется до тех пор, пока не будут вычислены все предикаты, от которых он зависит.
Отладка артефактов
Вы можете получить артефакты для помощи в поиске и устранении неполадок со сканированием кода CodeQL. Измените шаг init в файле рабочего процесса CodeQL и установите debug: true. Артефакты отладки загружаются в выполнение рабочего процесса как артефакт с именем debug-artifacts. Данные содержат журналы CodeQL, базы данных CodeQL и все файлы SARIF, создаваемые рабочим процессом.
Устранение неполадок с расширением CodeQL для VS Code
Файлы журнала расширения VS Code содержат подробные сведения для устранения неполадок.
Сообщения о ходе выполнения и ошибках отображаются в правом нижнем углу рабочей области. Вы можете использовать раскрывающийся список журнала расширения CodeQL, чтобы выбрать нужные журналы.
Распространенные сообщения об ошибках
Чтобы устранить неполадки рабочего процесса CodeQL, ознакомьтесь со следующими распространенными сообщениями об ошибках.
Ошибка: "Ошибка сервера"
Если выполнение рабочего процесса сканирования кода не удалось из-за ошибки сервера, это может быть связано с временной проблемой связи. Повторите попытку выполнения рабочего процесса. Если проблема сохранится, обратитесь в службу поддержки GitHub.
Ошибка: "Вне диска" или "Вне памяти"
CodeQL может не работать с диском или памятью в средстве выполнения для проектов, которые слишком большие. Если это размещенный GitHub Actions runner, обратитесь в службу поддержки GitHub, чтобы изучить проблему. Если это самостоятельно хостируемый исполнитель, возможно, потребуется внести изменения в спецификации сервера. Дополнительные сведения см. в документации CodeQL о рекомендуемом оборудовании для запуска CodeQL.
Ошибка: 403 "Ресурс недоступен для интеграции" при использовании Dependabot
Dependabot считается ненадежным при запуске рабочего процесса. Процесс выполняется с доступами только для чтения. Для загрузки результатов сканирования кода для конкретной ветви обычно требуется security_events: write scope. Однако сканирование кода всегда позволяет отправлять результаты, когда событие pull_request активирует выполнение действия. Для ветвей Dependabot рекомендуется использовать событие pull_request вместо события push.
Простой подход заключается в выполнении push-уведомлений в ветви по умолчанию и других важных длительных ветвей, а также запросов на вытягивание, открытых для этого набора ветвей.
Ниже приведен пример:
on:
push:
branches:
- main
pull_request:
branches:
- main
Ошибка: "Отправка SARIF отклонена из-за установки по умолчанию"
Отправка SARIF блокируется при включении настройки CodeQL по умолчанию. Эта ошибка возникает, когда процесс пытается отправить ФАЙЛ SARIF, содержащий результаты анализа CodeQL в репозиторий с включенной настройкой по умолчанию. Ошибка также возникает, если отправка выполняется через REST API и Cli CodeQL. Этот блок предназначен для уменьшения риска путаницы пользователей при генерации несколькими системами аналогичных оповещений сканирования кода.
Эта ошибка возникает только для ФАЙЛОВ SARIF, содержащих результаты, созданные с помощью CodeQL. Чтобы устранить эту ошибку, отключите CodeQL в репозитории, а затем повторите отправку ФАЙЛА SARIF.
Дальнейшее чтение
Дополнительные сведения об устранении неполадок см. в документации по CodeQL для устранения неполадок с сканированием кода.