Skip to main content

Загрузка результатов анализа CodeQL на #REF!

Вы можете использовать CodeQL CLI для отправки результатов анализа CodeQL в GitHub.

Кто может использовать эту функцию?

Пользователи с доступом на запись

CodeQL доступен для следующих типов репозитория:

После анализа базы данных CodeQL с помощью CodeQL CLIу вас будет ФАЙЛ SARIF, содержащий результаты. Затем можно использовать CodeQL CLI для отправки результатов в GitHub.

Если вы использовали метод, отличный от метода CodeQL CLI для создания результатов, можно использовать другие методы отправки. Дополнительные сведения см. в разделе AUTOTITLE.

Создание маркера для проверки подлинности с помощью GitHub

Прежде чем отправлять результаты в GitHub, сначала необходимо создать personal access token. См . раздел AUTOTITLE.

  • Personal access token (classic) требуется "Code scanning оповещений" доступ на чтение и запись для необходимых репозиториев.
  • Fine-grained personal access token требуется доступ к репозиторию security_events .

Если вы установили CodeQL CLI в сторонней CI-системе, вы также можете использовать GitHub App для загрузки результатов в GitHub. См . раздел AUTOTITLE.

Отправка результатов в GitHub

  1. Проверьте, что свойства SARIF имеют поддерживаемый размер для загрузки и совместим ли файл с сканированием кода. Дополнительные сведения см. в разделе AUTOTITLE.

  2. Определите лучший способ передачи GitHub App или personal access token, созданного в предыдущем разделе, в CodeQL CLI. Рекомендуется проанализировать руководство по использованию системы CI для безопасного использования хранилища секретов. CodeQL CLI поддерживает следующие действия:

    • Взаимодействие с хранилищем секретов с помощью параметра (рекомендуется).
    • Сохранение секрета в переменной среды и запуск интерфейса командной строки без включения параметра .
    • Для тестирования можно передать параметр командной строки и предоставить временный маркер с помощью стандартных входных данных.
  3. Если вы решили использовать наиболее безопасный и надежный метод конфигурации, запустите каждый файл результатов SARIF и включите , если маркер не доступен в переменной среды.

    # GitHub App or personal access token available from a secret store
    <call-to-retrieve-secret> | codeql github upload-results \
        --repository=<repository-name> \
        --ref=<ref> --commit=<commit> \
        --sarif=<file> --github-auth-stdin
    
    # GitHub App or personal access token available in GITHUB_TOKEN
    codeql github upload-results \
        --repository=<repository-name> \
        --ref=<ref> --commit=<commit> \
        --sarif=<file> 
    
ВариантОбязательноUsage
--repositoryУкажите ВЛАДЕЛЬЦА/ИМЯ репозитория, в который будут отправлены данные. Владелец должен быть организацией внутри предприятия или на плане GitHub Team , с GitHub Code Security включен для репозитория, если репозиторий не является общедоступным. Дополнительные сведения см. в разделе AUTOTITLE.
--refУкажите имя извлеченного и проанализированного , чтобы результаты можно было сопоставить с правильным кодом. Для ветки используйте: , для фиксации заголовка запроса на вытягивание используйте или для созданной GitHub фиксации слияния запроса на вытягивание используйте .
--commitУкажите полный SHA для проанализированной фиксации.
--sarifУкажите файл SARIF для загрузки.
--github-auth-stdinПередайте интерфейс командной строки GitHub App или personal access token, созданные для проверки подлинности с помощью REST API GitHubиз хранилища секретов с помощью стандартных входных данных. Это не требуется, если команда имеет доступ к переменной среды , заданной с помощью этого маркера.

Дополнительные сведения см. в разделе AUTOTITLE.

Примечание.

Если вы проанализировали несколько данных CodeQL базы данных для одной фиксации, необходимо указать категорию SARIF для каждого набора результатов, созданных этой командой. При отправке результатов в GitHubcode scanning использует эту категорию для хранения результатов для каждого языка отдельно. Если вы забыли это сделать, то при каждой отправке будут перезаписаны предыдущие результаты. Дополнительные сведения см. в разделе AUTOTITLE.

Базовый пример отправки результатов в GitHub

В следующем примере передаются результаты из ФАЙЛА SARIF в репозиторий . Для API code scanning сообщается, что результаты необходимы для фиксации в ветви . В примере предполагается, что GitHub App или personal access token, созданных для проверки подлинности с помощью REST API GitHub, использует переменную среды.

codeql github upload-results \
    --repository=my-org/example-repo \
    --ref=refs/heads/main --commit=deb275d2d5fe9a522a0b7bd8b6b6a1c939552718 \
    --sarif=/temp/example-repo-js.sarif 

Эта команда ничего не выводит, если загрузка не удалась. Командная строка возвращается после завершения загрузки и начала обработки данных. В небольших базах кода вы сможете просматривать оповещения code scanning в GitHub вскоре после этого. Вы можете видеть оповещения прямо в pull request или на вкладке Security для ветвей, в зависимости от кода, который вы взяли.

Отправка диагностических сведений в GitHub в случае сбоя анализа

Когда CodeQL CLI успешно завершает анализ базы данных, она собирает диагностические сведения, такие как покрытие файлов, предупреждения и ошибки, и включает его в ФАЙЛ SARIF с результатами. При отправке ФАЙЛА SARIF в GitHub диагностические сведения отображаются на code scanning Страница состояния средства для репозитория, чтобы сделать его простым, чтобы узнать, насколько хорошо CodeQL работает и отлаживать любые проблемы. Дополнительные сведения см. в разделе AUTOTITLE.

Однако, если файл SARIF не удается отправить в GitHub и диагностические данные не отображаются на code scanning Страница состояния средства для репозитория. Это затрудняет для пользователей устранение неполадок, если у них нет доступа к файлам журналов в системе CI.

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

Экспорт диагностических сведений при сбое анализа

Вы можете создать ФАЙЛ SARIF для неработоспособных анализов с помощью AUTOTITLE, например:

$ codeql database export-diagnostics codeql-dbs/example-repo \
    --sarif-category=javascript-typescript --format=sarif-latest \
    --output=/temp/example-repo-js.sarif

Этот ФАЙЛ SARIF будет содержать диагностические сведения для неудающегося анализа, включая сведения о охвате файлов, предупреждения и ошибки, созданные во время анализа.

Отправка диагностических сведений при сбое анализа

Эти диагностические сведения можно сделать доступными для Страница состояния средства путем отправки ФАЙЛА SARIF в GitHub с помощью AUTOTITLE, например:

codeql github upload-results \
    --repository=my-org/example-repo \
    --ref=refs/heads/main --commit=deb275d2d5fe9a522a0b7bd8b6b6a1c939552718 \
    --sarif=/temp/example-repo-js.sarif 

Это то же самое, что и процесс отправки SARIF-файлов из успешного анализа.