Fortify ScanCentral通常指Fortify ScanCentral SAST,用来把本地构建机上的扫描任务提交到Controller,再由Sensor去执行分析。它和单机版SCA不太一样,问题不只出在命令本身,还可能出在Controller、Sensor、任务池、SSC上传权限这些地方。Fortify ScanCentral怎么提交扫描,Fortify ScanCentral任务排队太久怎么办,可以按“先提交成功,再看任务状态,再处理排队原因”这个顺序排查。
一、Fortify ScanCentral怎么提交扫描
提交扫描前,先确认项目是要做“远程翻译+远程扫描”,还是“本地翻译+远程扫描”。前者把源码和依赖打包交给Sensor处理,后者先在本机用SCA完成翻译,再把构建会话提交到ScanCentral执行扫描。
1、远程翻译并扫描
进入【项目根目录】后,执行ScanCentral的start命令提交任务。
常见命令可以写成:
scancentral -sscurl
start命令可以用于远程扫描,也可以用于远程翻译加扫描;如果项目里有pom.xml、build.gradle、.sln等文件,ScanCentral会尝试自动识别构建工具,例如Maven、Gradle、MSBuild或dotnet。
如果不想让它自动判断,可以显式指定:
scancentral -sscurl
遇到非默认构建文件,可以加-bf;构建过程需要额外参数,可以加-bc。比如Maven或Gradle项目,不建议什么都不配就直接提交,脚本最好贴近真实构建命令,否则依赖、生成代码、编译参数都可能不完整。-bt支持dotnet、gradle、msbuild、mvn和none,-bc用于给Maven、Gradle、dotnet、MSBuild传构建参数。
2、提交后上传到SSC
如果扫描结果要直接上传到Fortify Software Security Center,需要加【-upload】并指定应用版本。
常见写法是:
scancentral -sscurl
也可以用版本ID:
scancentral -sscurl
上传到SSC时,应用名和版本名是区分大小写的;-upload表示扫描完成后上传结果,-application、-version和-versionid用于指定SSC里的应用版本。
3、本地翻译后远程扫描
如果项目不适合远程翻译,或者Sensor上不方便准备完整构建环境,可以先在本机翻译,再提交远程扫描。
大致流程是:
sourceanalyzer -b MyBuildId -clean
sourceanalyzer -b MyBuildId <原来的构建或翻译命令>
scancentral -sscurl
如果还要上传到SSC,可以写成:
scancentral -sscurl
-b用于指定已经翻译好的build ID,-scan表示后面的参数进入SCA扫描阶段;官方示例里也给出了本地翻译、远程扫描并上传到SSC的写法。
二、Fortify ScanCentral任务排队太久怎么办
任务排队太久,不要只看页面上“Pending”或“Queued”几个字。要先确认任务卡在什么状态,再判断是没有Sensor接任务、Sensor太忙、任务池不匹配,还是前面堆了太多重复扫描。
1、先查任务状态
拿到提交后返回的job token,执行
命令查看状态。
scancentral -url
状态里,PENDING表示Controller已经接收扫描任务,QUEUED表示任务已经分配给Sensor,RUNNING才是正在运行;所以长时间停在PENDING和长时间停在QUEUED,排查方向并不一样。
如果一直是PENDING,优先看Controller能不能找到可用Sensor,任务池是否匹配,Sensor是否被禁用或正在维护。如果已经是QUEUED,更像是Sensor接到了任务但还没真正跑起来,可能前面有大任务、Sensor资源不足,或者同一个池里的任务过多。
2、检查Sensor和任务池
进入【SSC】里的ScanCentral SAST页面,查看Controller、Sensor、Scan Requests和Sensor Pools。
SSC集成后,可以查看Controller和Sensor信息、查看扫描请求详情、导出结果和日志,也可以创建和管理Sensor Pools,并对扫描请求进行优先级调整或取消。
如果不同项目都挤在默认池里,排队会很明显。可以给大项目、高内存项目、普通项目拆不同Sensor Pool,再提交时指定池:
scancentral -sscurl
-pool可以指定具体Sensor Pool,支持UUID或池名称。
OpenText
3、清理没必要的重复任务
CI频繁触发时,很容易同一个分支、同一个应用版本反复提交扫描。前面任务还没跑完,后面任务又进来了,队列自然越来越长。
如果确认某个任务已经没意义,可以取消:
scancentral -url
ScanCentral支持通过命令取消扫描,也可以在SSC里的ScanCentral SAST视图中取消请求。
另外,Controller默认可以用replace_duplicate_scans处理上传到同一应用版本的重复待处理任务,目的就是减少CI里堆积的无效重复扫描;如果某个发布扫描不能被替换,再用--disallow-replacement单独保护。
三、提交脚本怎样写得更稳
ScanCentral排队问题,有一部分是资源不够,有一部分其实是提交脚本太粗。脚本越粗,打包越大、依赖越乱、扫描时间越长,最后就会拖慢整个队列。
1、控制扫描范围
提交时可以用【-include】和【-exclude】控制文件范围。
比如排除测试代码:
scancentral -sscurl
也可以只扫描指定目录:
scancentral -sscurl
-exclude用于排除文件或目录,-include用于只纳入指定路径;Windows多路径常用分号分隔,Linux多路径常用冒号分隔。
2、保存日志和任务包
提交命令里可以加【-log】、【-slog】、【-j】、【-diag】。
-log用于保存本地日志,-slog配合-block可以保存Sensor日志,-j可以保存提交到ScanCentral的任务包,-diag可以生成包含客户端、Sensor和SAST调试信息的诊断包。
排队太久时,这些文件很有用。比如任务包特别大,就说明打包范围可能失控;Sensor日志长时间没有推进,就要看Sensor机器资源、授权、环境和前置任务。
3、不要让单个任务长期占住Sensor
大项目可以拆模块扫,不要什么都塞到一个任务里。必要时可以给任务设置扫描超时时间:
scancentral -sscurl
-sto用于指定Sensor处理某个任务的最大分钟数,而且优先级高于Controller配置文件里的scan_timeout。
这个参数不是越小越好,也不是随便加。它适合处理“单个异常任务长期占用Sensor”的情况。正常的大型项目,还是应该通过拆模块、排除无关目录、补全构建参数来减少扫描时间。
总结
Fortify ScanCentral怎么提交扫描,先分清远程翻译扫描和本地翻译远程扫描,再按项目类型补好-bt、-bf、-bc、-upload、应用版本和token。Fortify ScanCentral任务排队太久怎么办,不要马上重提任务,先用status看清楚是PENDING、QUEUED还是RUNNING,再检查Sensor状态、Sensor Pool、重复任务和扫描范围。真正稳定的ScanCentral流程,不是靠反复点“重新扫描”,而是把提交脚本、任务池和队列管理一起理顺。