執行批次安全掃描
從 GitHub 發現儲存庫,或使用 CSV 清單執行可恢復的安全掃描。
使用 npx @openai/codex-security bulk-scan 審查同一批次中的多個儲存庫。你可以從個人 GitHub 賬號或組織發現儲存庫,也可以提供 CSV,將每個儲存庫固定到精確的 Git revision。
選擇儲存庫源
| 來源 | 適用場景 |
|---|---|
| GitHub 發現 | 從個人 GitHub 賬號或組織中互動選擇儲存庫。 |
| CSV 清單 | 針對精確的儲存庫 revision 執行可重複的自動化掃描批次。 |
這兩個工作流程都會儲存進度、保留每個儲存庫的結果,並讓你在中斷後恢復掃描活動。
發現 GitHub 儲存庫
使用 GitHub CLI 登入:
gh auth login啟動互動式批次掃描:
npx @openai/codex-security bulk-scanCLI 指導你完成以下步驟:
- 選擇你的個人 GitHub 賬號或組織。
- 檢視過去 90 天內活動的儲存庫。
- 搜尋儲存庫列表並選擇要掃描的儲存庫。
- 選擇掃描結果的目錄。
- 檢視選定的儲存庫並確認掃描批次。
發現不包括已歸檔儲存庫和 fork。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 |
必填 | HTTPS URL、SSH URL 或本機儲存庫路徑。相對路徑以 CSV 所在目錄為基準解析。 |
revision |
必填 | 完整的 40 或 64 字元 Git commit SHA。不支援 branch 名稱、tag 或縮寫 commit hash。 |
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 會檢出每個固定 revision、掃描選定目標、記錄結果,並刪除臨時的儲存庫檢出目錄。只有當掃描覆蓋完整且所有必要結果產物均存在時,儲存庫才會被視為完成。
選擇模型和推理強度
批次掃描預設使用 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記錄該掃描批次中的儲存庫、固定 revision、範圍和掃描模式。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 會校驗固定的 manifest,並拒絕不屬於同一批次的掃描。更改儲存庫、revision、範圍或掃描模式時,請使用新的輸出目錄。
重試儲存庫錯誤
使用 --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 設定,用於 Linux Docker 主機上的自動化 CSV 批次掃描。主機必須支援非特權使用者名稱空間建立。
將儲存庫 CSV、掃描結果和登入狀態掛載到持久目錄。通過環境變數或 secret manager 提供 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 主機。
要檢視所有可用 flag,請參閱批次掃描命令參考。有關掃描覆蓋範圍和結果的常見問題,請參閱 CLI 常見問題解答。