Запуск массового сканирования безопасности
Находите репозитории GitHub или запускайте возобновляемое сканирование безопасности на основе реестра CSV.
Используйте npx @openai/codex-security bulk-scan для проверки репозиториев в рамках одной
кампании. Находите репозитории в личной учётной записи GitHub или
организации либо предоставьте CSV, в котором каждый репозиторий привязан к точной
ревизии Git.
Выбор источника репозиториев
| Источник | Когда использовать |
|---|---|
| Поиск на GitHub | Интерактивно выбирайте репозитории в личной учётной записи GitHub или организации. |
| Реестр CSV | Запускайте повторяемую автоматизированную кампанию для точных ревизий репозиториев. |
Оба рабочих процесса сохраняют ход выполнения и результаты каждого репозитория, а также позволяют возобновить кампанию после прерывания.
Поиск репозиториев GitHub
Войдите в систему с помощью GitHub CLI:
gh auth loginЗапустите интерактивное массовое сканирование:
npx @openai/codex-security bulk-scanCLI проведёт вас через следующие шаги:
- Выберите личную учётную запись GitHub или организацию.
- Просмотрите репозитории, активные за последние 90 дней.
- Выполните поиск в списке репозиториев и выберите репозитории для сканирования.
- Выберите каталог для результатов сканирования.
- Проверьте выбранные репозитории и подтвердите кампанию.
При поиске исключаются архивные репозитории и форки. CLI записывает точный
коммит ветки по умолчанию для каждого выбранного репозитория в
<output-directory>/repositories.csv. Сканирование не начнётся, пока вы не подтвердите
выбор.
Чтобы использовать GitHub Enterprise Server, сначала войдите на свой хост GitHub:
gh auth login --hostname github.example.comЗадайте GH_HOST при запуске поиска репозиториев:
GH_HOST=github.example.com npx @openai/codex-security bulk-scanДля интерактивного поиска требуется терминал. В CI, контейнерах или при наличии подготовленного списка репозиториев используйте вместо него реестр CSV.
Создание CSV с репозиториями
Создайте CSV с одной строкой для каждого репозитория и закреплённой ревизии:
id,repository,revision,scope,mode
payments,https://github.com/example/payments.git,0123456789abcdef0123456789abcdef01234567,services/api,standard
identity,https://github.com/example/identity.git,fedcba9876543210fedcba9876543210fedcba98,,deepCSV поддерживает следующие столбцы:
| Столбец | Обязательный | Описание |
|---|---|---|
id |
Да | Уникальный идентификатор репозитория. Используйте буквы, цифры, точки, дефисы или символы подчёркивания. |
repository |
Да | URL HTTPS, URL SSH или путь к локальному репозиторию. Относительные пути разрешаются от каталога CSV. |
revision |
Да | Полный 40- или 64-символьный SHA коммита Git. Имена веток, теги и сокращённые хеши коммитов не поддерживаются. |
scope |
Нет | Каталог относительно репозитория для сканирования. Не указывайте значение, чтобы сканировать весь репозиторий. |
mode |
Нет | standard или deep. Не указывайте значение, чтобы использовать режим, выбранный для команды. |
Чтобы узнать полный SHA коммита локального репозитория, выполните:
git -C /path/to/repository rev-parse HEADЗапуск кампании из CSV
Передайте CSV и закрытый каталог вывода, находящийся вне репозиториев:
npx @openai/codex-security bulk-scan repositories.csv \
--output-dir /path/outside/repositories/security-scans \
--workers 4--workers определяет количество одновременных сканирований репозиториев; значение по умолчанию —
4. Используйте --mode deep, чтобы выбрать глубокое сканирование для строк без собственного
mode. При этом для каждой строки CSV по-прежнему можно выбрать собственный режим сканирования и область репозитория.
CLI извлекает каждую закреплённую ревизию, сканирует выбранную цель, записывает результат и удаляет временную рабочую копию репозитория. Репозиторий считается обработанным, только если сканирование полностью охватывает заданную область и существуют все необходимые артефакты результатов.
Выбор модели и уровня рассуждений
По умолчанию массовое сканирование использует gpt-5.6-sol с уровнем рассуждений xhigh. Чтобы
выбрать другую модель и уровень для кампании CSV:
npx @openai/codex-security bulk-scan repositories.csv \
--output-dir /path/outside/repositories/security-scans \
--workers 4 \
--model gpt-5.6-terra \
--effort highТе же параметры доступны при интерактивном поиске репозиториев:
npx @openai/codex-security bulk-scan --model gpt-5.6-terra --effort highПоддерживаются уровни minimal, low, medium, high и xhigh.
Просмотр результатов кампании
Каталог вывода содержит закреплённую конфигурацию кампании, журнал результатов только для добавления и отдельные артефакты для каждого репозитория и каждой попытки:
security-scans/
├── manifest.json
├── results.jsonl
├── checkouts/
└── artifacts/
├── payments/
│ └── attempt-1/
│ ├── scan-manifest.json
│ ├── findings.json
│ ├── coverage.json
│ └── report.md
└── identity/
└── attempt-1/
├── scan-manifest.json
├── findings.json
├── coverage.json
└── report.mdmanifest.jsonсодержит репозитории, закреплённые ревизии, области и режимы сканирования кампании.results.jsonlсодержит каждую попытку обработки репозитория, её статус, каталог артефактов и доступные сведения о стоимости или ошибках.report.mdпредоставляет удобочитаемый отчёт об одной попытке обработки репозитория.findings.jsonиcoverage.jsonсодержат обнаруженные в этой попытке проблемы и проверенную область.
Экспортируйте результаты одного завершённого сканирования репозитория, если вам нужен переносимый результат:
npx @openai/codex-security export \
/path/outside/repositories/security-scans/artifacts/payments/attempt-1 \
--export-format sarif \
--output /path/outside/repositories/payments.sarifРезультаты могут содержать фрагменты исходного кода и сведения об уязвимостях. Храните каталог вывода в закрытом доступе, вне сканируемых репозиториев, и применяйте к нему подходящую политику хранения.
Возобновление кампании
Запустите исходную команду с теми же CSV и каталогом вывода:
npx @openai/codex-security bulk-scan repositories.csv \
--output-dir /path/outside/repositories/security-scans \
--workers 4CLI возобновит обработку репозиториев, для которых ещё требуется выполнить работу. Завершённый репозиторий пропускается, только если соответствующая квитанция и все необходимые артефакты сканирования по-прежнему существуют.
Не изменяйте реестр репозиториев для существующего каталога вывода. CLI проверяет закреплённый манифест и отклоняет другую кампанию. Используйте новый каталог вывода при изменении репозиториев, ревизий, областей или режимов сканирования.
Повторные попытки при ошибках репозитория
Используйте --max-attempts, чтобы повторить обработку репозитория после временной ошибки извлечения или
сканирования:
npx @openai/codex-security bulk-scan repositories.csv \
--output-dir /path/outside/repositories/security-scans \
--workers 4 \
--max-attempts 3По умолчанию для каждого репозитория выполняется одна попытка. Каждая попытка получает собственную квитанцию и каталог артефактов.
Массовое сканирование использует следующие коды завершения:
| Код завершения | Значение |
|---|---|
0 |
Все репозитории успешно обработаны. |
2 |
Не удалось обработать репозиторий, сканирование охватило область не полностью либо команда столкнулась с ошибкой ввода или выполнения. |
130 |
Кампания прервана нажатием Ctrl-C. |
143 |
Кампания завершена сигналом SIGTERM. |
Запуск массового сканирования в Docker
Репозиторий Codex Security содержит усиленную конфигурацию Compose для автоматизированных кампаний CSV на хосте Linux с Docker. Хост должен поддерживать создание непривилегированных пространств имён пользователей.
Подключите CSV с репозиториями, результаты сканирования и данные состояния входа как постоянные
каталоги. Передавайте учётные данные OpenAI через окружение или менеджер
секретов. Для закрытых репозиториев GitHub таким же способом предоставьте GH_TOKEN или GITHUB_TOKEN.
Запустите образ с подключёнными CSV и каталогом вывода:
docker compose run --rm codex-security \
bulk-scan /input/repositories.csv \
--output-dir /output \
--workers 4Чтобы возобновить кампанию, используйте те же подключённые CSV и каталог вывода. Для
GitHub Enterprise Server задайте в CODEX_SECURITY_GIT_HOST свой хост GitHub.
Описание всех доступных флагов см. в справочнике по команде bulk-scan. Ответы на распространённые вопросы об охвате сканирования и обнаруженных проблемах см. в часто задаваемых вопросах по CLI.