Skip to content

Latest commit

 

History

History
71 lines (40 loc) · 2.43 KB

File metadata and controls

71 lines (40 loc) · 2.43 KB

这套方案的核心逻辑是:“容器化环境 + 智能降级策略 + 分步执行”。

你需要开发一个控制脚本(Python/Go),按照以下流程去操作:

  1. 核心架构:必须上 Docker 不要在你的服务器裸机上跑 C++ 建库。

准备一个“胖镜像” (Fat Docker Image):

基础镜像:Ubuntu 20.04/22.04

预装工具:CodeQL CLI, GCC, Clang, Make, CMake, Ninja, Maven, Gradle, Ant, Python, git。

预装库(关键):build-essential, libssl-dev, zlib1g-dev, libboost-all-dev, 以及其他常见的 C++ 开发库。

理由:C++ 编译缺一个库就会挂,预装越多,成功率越高。

  1. 自动化脚本逻辑流程图 你的工具应该按照这个优先级逻辑来运行:

第一步:初始化 (Init) 无论什么情况,先搭好架子。

Bash

codeql database init --language=cpp --source-root=/src /out/db --overwrite 第二步:构建探测与注入 (Trace) —— 最核心逻辑 这里采用 “三级降级策略”:

Level 1:用户显式提供了构建命令 (优先级最高)

场景:用户在界面填了 mkdir build && cd build && cmake .. && make。

动作:直接执行。

Trick:在命令前强行拼一个 clean 操作(如果能识别构建系统),或者简单粗暴建议用户提供带 clean 的命令。

执行:codeql database trace-command /out/db -- <用户命令>

Level 2:启发式探测 (如果没有用户命令)

你的脚本去源代码根目录看一眼:

有 CMakeLists.txt -> 自动构造命令:mkdir -p build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release && make -j$(nproc)

只有 Makefile -> 自动构造命令:make clean && make -j$(nproc)

有 build.sh 或 configure -> 自动构造命令:chmod +x build.sh && ./build.sh

执行:codeql database trace-command /out/db -- <构造的命令>

Level 3:Autobuild 兜底 (最后手段)

如果上面都没匹配到,死马当活马医。

执行:codeql database trace-command /out/db -- codeql-autobuild

第三步:封包 (Finalize) Bash

codeql database finalize /out/db 第四步:质量校验 (Validate) 这步不能省! C++ 建库最怕“假成功”(命令跑完了,但其实没编译到东西)。

检查指标:

检查数据库目录下的 src.zip 是否存在且大于几 KB。

(进阶) 检查 db-cpp/default/trap 目录下是否有数据。

动作:如果校验失败,标记任务为 Failed,并输出日志提示用户“编译环境缺失或构建命令错误”。