跳转到内容

CLI 使用手册

一、命令行获取

1.1.工具下载

登录清源 SCA 社区版 web 页面,点击右侧下载图标,选择工具下载,如图所示:

CLI下载

1.2.环境要求

软件环境:jdk8 及以上。

1.3.系统兼容性

支持 Linux/Windows/Mac 系统。

1.4.系统编码

Windows 下使用清源命令行(CLI)需要将编码改成 UTF-8。

二、功能说明

命令行工具支持连接 web 服务创建检测任务。

2.1.创建源码扫描任务

使用步骤: 执行以下命令,填入相关参数:

shell
java -jar cleansource_sca_build_scan.jar --taskDir=***** --username=**** --password=**** --logLevel=***** --outputPath=****
参数说明限定值
usernameWeb 端用户名必填 (当前 cli 仅支持邮件方式登录)
passwordWeb 端用户名对应的密码必填
logLevel日志级别非必填(TRACE, DEBUG, INFO)默认值 INFO
taskDir扫描文件路径必填,需填写绝对路径
outputPath临时文件输出目录(日志文件,解压文件等)非必填(默认输出在系统用户目录下)

三、包管理器说明

包管理器通常用于操作系统或编程语言的生态系统中。它可以从官方软件源或其他可信的软件仓库获取软件包依赖,不同的包管理器会有不同的检测器以获取项目里面引用的依赖。

3.1.包管理器支持情况

包管理器语言构建类型检测原理
MavenJava构建

Maven检测器需要mvn或者mvnw可执行程序

执行mvn dependency:tree命令获取日志输出,解析标准的依赖日志输出,自定义的输出会使解析失效

非构建若Maven检测器执行命令失败,则会去解析目录下的pom.xml里面的依赖信息。
PipPython构建

Pip检测器需要项目路径下找到setup.py 文件或 requirements.txt。

1. 需要提前完成依赖的下载——在对应目录下执行python setup.py install (有setup.py文件执行)或者pip install -r requirements.txt (有requirements.txt 文件执行)。

2. Pip检测器需要python和pip可执行程序。

 a) 需要在Path环境变量里面配置python和pip对应的执行程序路径执行Pip包管理工具解析依赖树信息。

非构建若pip检测器执行命令失败,则会解析目录下的requirements.txt里面的依赖信息。
PipenvPython构建

Pipenv 检测器在项目中找到Pipfile或Pipfile.lock文件。

1. Pipenv 检测器需要Python和Pipenv可执行文件,如没有配置pipenv则需要在当前项目下执行pip install pipenv 命令。

2. 当在项目目录下运行相关 Pipenv 命令时(如 pipenv install),Pipenv 首先查找 Pipfile。如果找到,它将根据该文件中列出的依赖来创建或更新 Pipfile.lock,并安装依赖。

3. 如果还没有 Pipfile,Pipenv 将在执行安装任何包时创建它。

4. Pipfile.lock 文件是自动生成的,用来确保所有开发和部署环境中的依赖版本一致,防止因版本不同导致的问题。

非构建若pipenv检测器执行命令失败,则会解析目录下的Pipfile.lock里面的依赖信息。
Go modGo构建

Go mod检测器利用Go mod程序去检测go项目的依赖关系。

1. 安装有go可执行程序。

2. go安装程序的bin目录添加环境变量项目下需要有go.mod文件。

非构建若Go mod构建执行失败,则会查找go.mod文件以获取依赖信息。
Go depGo构建不支持
非构建

使用Go dep管理依赖。且存在外部可执行文件,例如:Go、DEP等。

Go dep检测器会去发现项目下的 Gopkg.lock 文件,并解析 Gopkg.lock 以获取依赖项。

Go vendorGo构建不支持
非构建

使用Go vendor管理依赖,检测发现项目下的vendor.json文件,对其进行解析以后获取依赖项。

四、常见问题

4.1.日志乱码

Windows 默认编码为 gbk 可能会导致编码问题,需要将系统编码改成 UTF-8。

Windows 设置方法:

  1. 首先打开注册表编辑器 注册表编辑器

  2. 找到:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor 目录下 找到注册表

  3. 新增 autorun 字符串值文件 数值数据填写 chcp 65001>nul 新增autorun字符串值文件

4.2.创建任务报错“Too many open files”

从客户端窗口或 CLI 输出信息中,可以看到类似报错信息: Too many open files

出错的原因是 CLI 进行文件处理时,系统所有进程已打开的文件句柄数超过了操作系统的“可打开文件句柄最大数量”值,引发了报错。

通过如下命令行获取进程已打开文件句柄数:

  1. 获取 CLI 进程打开的文件句柄数
shell
lsof -n | grep CLI进程号| wc -l

如:

shell
lsof -n | grep 2529173| wc -l
1155945
  1. 获取系统所有进程打开的文件句柄数(结果第一列为句柄数,第二列为进程号)
shell
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more
1155945 2529173
369072 713430
290250 621470
14025 430965
12888 3517209
8304 3520477
6840 123989
3015 1231144
3015 1231127
3015 1231111
3015 1231095

通过命令行修改“可打开文件句柄最大数量”值。有两种可选方案:

  • 当前会话(shell session)生效

    • 修改上限值:ulimit -n 1000000
    • 确认是否生效:ulimit -a
    • 该方案只对当前会话一次性生效,会话退出后即失效
  • 系统永久生效

    • 修改/etc/security/limits.conf 文件,末尾加上这两行
    txt
      root soft nofile 1000000
      root hard nofile 1000000
    • 重启宿主机(是否需要重启因操作系统而异)
    • 执行 ulimit -a 验证 open files 数值是否生效
  1. 创建任务失败(权限不足) 修改信任库文件访问权限 777: JDK 1.8,默认的 Trust Store 是位于$JAVA_HOME/lib/security/cacerts: 修改权限:
shell
chmod 777 cacerts

JDK 11, 默认的 Trust Store 的路径应该是:/etc/ssl/certs/java/cacerts

  1. 执行任务异常:java.lang.OutOfMemoryError

报错信息类似: 报错 解决方案: 执行 CLI 时,增加 JVM 堆内存参数,避免大项目扫描报 OOM 内存溢出, 命令示例: 命令示例

参数说明: Xms:指设定程序启动时占用内存大小 Xmx:指设定程序运行期间最大可占用的内存大小