集成外部扫描工具
功能介绍
代码扫描功能支持自行集成扫描工具,集成后的工具能够被「代码扫描」模块调度。还支持对扫描结果的统一查看与处理。接入外部工具需要先进行标准化操作,集成至 CODING 扫描方案中开始使用。
1. 接入标准化
准备好相应的扫描工具代码,或其他开源扫描工具,按照以下指引进行接入标准化。点击参考示例项目。
环境变量说明
代码分析 提供环境变量(具体调用方式可参考示例项目):
SOURCE_DIR:要分析的代码目录路径
DIFF_FILES: 增量文件列表(可用于处理增量扫描的场景,执行速度更快)
TASK_REQUEST: 任务参数 json 文件路径
运行方式
支持命令行执行,比如python run.py
或run.exe
,在工具代码的根目录执行命令。
获取要分析的源码
在代码中通过环境变量获取,比如 python 代码:
import os
source_dir = os.environ.get("SOURCE_DIR", None)
适配标准输出
结果输出到当前工作目录下的result.json
文件中,比如 Python 代码:
import json
with open("result.json", "w") as fp:
json.dump(result, fp, indent=2)
result.json
文件格式如下:
[
{
"path": "文件绝对路径",
"line": "行号",
"column": "列号,可以直接写0",
"msg": "提示信息",
"rule": "规则名称,可以根据需要输出不同的规则名",
"refs": [
{"line": "回溯行号",
"msg": "提示信息",
"tag": "用一个词简要标记该行信息,比如uninit_member,member_decl等,如果没有也可以都写成一样的",
"path": "回溯行所在文件绝对路径"
},
...
]
},
{
...
},
...
]
tips:
refs
为可选项,用于记录问题回溯路径信息。比如当前文件的回溯路径其他的 3 行代码,可以将这三行的路径及提示信息,按顺序添加到 refs 数组中。
2. 集成阶段
提交至代码仓库
将准备好的工具代码,提交至任意项目中的 CODING 代码仓库中的 master 分支中;若后续有更新,我们将自动拉取最新的代码。
集成至 CODING
点击导航左下角的设置按钮,前往「功能设置」→「代码扫描」→「工具规则」中进行管理。
按照页面提示逐步输入数据。
其中,我们提供以下公共环境变量,其余环境需打包进代码仓库后自行安装。
- 环境变量:工具执行所需的环境变量
环境 版本 指定方式 node 12 PATH=/data/codedog/tools/linux-node-v12.16.3/bin:$PATH java 8 PATH=/data/codedog/tools/linux-jdk8/bin:$PATH java 11 PATH=/data/codedog/tools/linux-openjdk-11.0.2/bin:$PATH python 2.7 PATH=/data/codedog/tools/linux-Python-v2.7.13/bin:$PATH python 3.7 PATH=/data/codedog/tools/linux-Python-v3.7.2/bin:$PATH go 1.12 PATH=/data/codedog/tools/linux-go-1.12.6/bin:$PATH 更多环境变量陆续支持中
添加扫描规则
创建工具后,点击进入工具详情,在「规则列表」中配置新规则。
按照页面提示填写规则配置。
请注意 规则名称
或 real_name
需要与工具产出的 result.json
文件中的 rule 字段对应,以实现扫描结果与规则的匹配,填写完成后点击确认。
3. 使用工具
在代码扫描中选择任意扫描方案,点击添加“自定义规则”。
勾选相关工具下的扫描规则,点击批量添加。在扫描任务中启用带有此规则的扫描方案即可使用该工具。
在阅读中是否遇到以下问题?*
您希望我们如何改进?*
如果您希望得到回复,请留下您的邮箱地址。