自定义工具

腾讯云代码分析平台支持用户自助添加管理工具。

适用场景:自定义规则无法满足团队业务复杂需求,需要更多的代码逻辑来匹配目标代码的情况。通常需要团队业务方自行实现对应代码分析工具。

只需要几步操作:

  1. 编写代码,实现扫描工具逻辑
  2. 提交工具到 git 代码库
  3. 在页面创建新工具
  4. 为工具添加规则
  5. 在项目分析方案中添加规则

自定义工具步骤说明

第一步,编写代码,实现分析工具逻辑

根据需要匹配的目标代码场景,编写对应的工具逻辑。 可以参考 Python 写的 Demo 项目在新窗口打开

必要:

  • 运行方式:支持命令行执行,比如 python run.py 或 run.exe,执行命令的工作目录为工具代码的根目录

  • 运行环境说明

    平台已内置Python 环境Java 环境

    提示

    已内置 Python 环境(可以指定 Python 版本),如果依赖第三方 pip 包,不能保证已内置

    已内置 Java 环境(内置 JDK_8_HOME 环境变量,并在 PATH 环境变量中添加了 JDK_8_HOME 的 bin 目录,可以按需获取使用)

    以上内置环境无法支持?

    • 建议把依赖包内置在工具 git 库中,自行加载所需环境(比如执行时,自动将内置依赖目录,添加到 PATH 环境变量)

    • 也可以将工具打包成可执行程序(比如用 pyinstaller 打包 python 代码)

  • 平台已提供的环境变量

    使用方式请参考 Demo 项目在新窗口打开

    # TCA 已提供的环境变量
    SOURCE_DIR:要扫描的代码目录路径
    DIFF_FILES: 增量文件列表
    TASK_REQUEST: 任务参数json文件路径
    
    # 获取环境变量demo(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": "行号,int类型",
            "column": "列号, int类型,如果工具没有输出列号信息,可以用0代替",
            "msg": "提示信息",
            "rule": "规则名称,可以根据需要输出不同的规则名",
            "refs": [
                {
                    "line": "回溯行号",
                    "msg": "提示信息",
                    "tag": "用一个词简要标记该行信息,比如uninit_member,member_decl等,如果没有也可以都写成一样的",
                    "path": "回溯行所在文件绝对路径"
                },
                ...
            ]
        },
        ...
    ]
    

    refs 字段说明:

    非必需项,可无。该字段记录问题回溯路径信息。比如当前文件的回溯路径其他的 3 行代码,可以将这三行的路径及提示信息,按顺序添加到 refs 数组中。

第二步,提交工具到 git 代码库

  • 创建代码库,将工具源代码或编译打包后的可执行文件提交到代码库中

    建议代码库中加入 README.md 文件,说明工具功能和维护人

  • 后续需要修改规则实现逻辑,可以直接更新代码库,TCA 平台在执行该工具时,会自动拉取最新工具版本

第三步,在工具管理页面中创建工具

  • 进入工具管理页面,点击创建工具

  • 填写工具信息

    部分参数说明:

    • 工具仓库地址,即前述步骤中提交的工具 git 代码库地址

    • 工具认证,授权拉取工具仓库的权限

    • 执行命令,该命令会在工具根目录下执行

    • 环境变量,工具执行所需的环境变量

      提示

      我们已提供以下公共环境变量

        python_version = 可选,如果工具是python执行,可以指定python版本,可选值:2,3,3.8(3指的是3.7)
      
    • License,如果是开源工具,填写工具遵循的开源协议,或者填写自研共建

    • 是否为编译型工具,表示在使用该工具对用户代码进行分析时,是否要求代码需要编译或可执行编译

第四步,为工具添加规则

  • 完成工具创建后,进入规则列表,为工具添加规则

  • 填写规则信息

    部分参数说明:

    • 规则简介:简要描述规则发现的是什么问题,扫描结果中会作为问题标题展示

    • 详细描述:可详细描述规则,以及规则的解决方式,建议附上解决案例 demo

    • 解决方法:按照实际情况,说明该代码问题的解决方法,建议附上解决案例 demo

    • 规则参数:如果不需要通过规则参数传递信息,可留空

第五步,将工具配置到执行节点

提示

需要联系平台管理员协助操作,在节点管理-工具进程配置中找到对应工具,将其配置到对应机器上。

完成节点配置工具进程后,才能在项目中采用该工具进行分析

第六步,完成上述操作,在项目中使用工具规则

  • 进入到项目中,在分析方案-代码检查进行规则配置

  • 点击添加规则,找到对应工具规则进行添加

  • 添加完成后,启动分析,建议启动一次全量分析

自定义工具权限说明

  • 默认自定义工具仅团队管理员可操作,团队内所有成员可使用,

    • 团队管理员才能创建工具,添加工具规则等,具备该工具全部权限

    • 团队内所有成员可使用该工具规则,如在规则配置中添加此工具规则,团队普通成员仅只读权限

  • 工具希望全平台使用?

    由于全平台使用的工具影响范围较大,建议团队先在团队内对工具进行充分测试,保障团队内工具的高有效性,如需全平台使用,需联系平台管理员进行申请

    平台管理员需对此工具进行审核,在确保工具的高有效性下可将此工具权限调整为全平台可使用