Semgrep 安装与部署
二、安装与部署
Semgrep 是单文件命令行工具,安装方式多,容器方式最适合 CI。
- 本地安装:用 pip 或包管理器装,注意 Python 版本要求(以官方文档为准)。
- 验证安装:跑一次版本命令确认可用。
- 先用官方规则跑一遍:
--config auto会按代码语言自动挑选规则集,适合第一次摸底。 - 切换到自维护规则:把团队自己的规则放在仓库的
rules/目录,用--config ./rules指定,避免依赖外网。 - 接入 CI:容器方式执行,或用官方提供的流水线模板。
# 安装
pip install semgrep
# 或
brew install semgrep
# 验证
semgrep --version
# 摸底:按语言自动选官方规则集扫整个仓库
semgrep scan --config auto .
# 只扫指定目录,排除测试与依赖目录,限制资源
semgrep scan \
--config ./rules \
--exclude tests/ \
--exclude node_modules/ \
--exclude vendor/ \
--severity ERROR \
--timeout 30 \
--max-memory 4096 \
--jobs 4 \
.
容器方式(CI 里最省事):
# 挂载当前目录到容器内 /src 执行扫描
docker run --rm -v "${PWD}:/src" returntocorp/semgrep semgrep scan --config ./rules /src
# 产出 SARIF,交给代码扫描面板
docker run --rm -v "${PWD}:/src" returntocorp/semgrep \
semgrep scan --config ./rules --sarif -o /src/semgrep.sarif /src
内网与私有 Registry:完全隔离的环境里不要依赖在线规则集,把规则文件随仓库一起管理,用 --config ./rules 指定本地路径即可;若要用 Registry 上的公共规则,需要能访问外网并按官方方式登录。
| 报错 | 原因 | 处理 |
|---|---|---|
semgrep: command not found | pip 的用户级 bin 目录不在 PATH 中 | 把该目录加入 PATH,或改用容器方式运行 |
Invalid rule schema | 规则 YAML 缺少必填字段或字段名拼错 | 对照规则 schema 检查 id、message、severity、languages、patterns 是否齐全 |
Rule parse error / pattern 解析失败 | pattern 里的代码片段在该语言下不是合法语法 | 把 pattern 写成能独立解析的最小片段,先去掉上下文再逐步加条件 |
| 扫描时被系统杀掉(OOM) | 大仓库默认内存上限不够 | 调 --max-memory,配合 --exclude 排除构建产物与依赖目录 |
| 扫描迟迟不结束 | 个别文件超大或存在复杂嵌套 | 设 --timeout 与 --jobs,把超大生成代码移出扫描范围 |
| 规则命中数远高于预期 | pattern 写得太宽,把测试代码也匹配了 | 在规则里加 paths 的 include/exclude |

