本文介绍如何设计属于您业务场景的代码检测方案。
代码检测使用云效 Flow 流水线资源运行,运行并发数和运行时长通过流水线资源进行计算,在资源额度内可正常使用检测,如果超出流水线资源额度,可开通资源按量计费获取更多运行资源,参见按量计费规则。
步骤一:新建检测方案
-
登录云效代码管理 Codeup首页,单击左侧导航栏。
-
配置检测方案。
平台已内置部分方案供参考使用,您也可以结合自身的业务场景复制或新建适合自己的检测方案。
-
内置方案
可以根据自身情况复制或新建自己的方案,具体操作方式如下。
在左侧列表中选择一个内置方案(如Python推荐检测方案),可单击右上角复制/编辑方案复制该方案供自定义使用,或单击复制方案按钮快速复制,也可以单击添加规则为方案添加新的规则包。
-
复制方案
选择适合您的推荐检测方案进行复制。在弹出的添加检测方案对话框中,选择复制已有方案,输入方案名称和方案描述,从选择方案下拉框中选择目标方案,单击确定。
-
新建检测方案在弹出的添加检测方案对话框中,选择新建方案,输入方案名称和方案描述,在添加规则包区域选择语言(如 TypeScript、Nodejs、Python、Go、C/C++、Lua),然后单击添加规则检测包从对应语言的规则包列表中选择需要的检测包,单击确定。
-
编译配置
说明为了避免使用时需要重复填写编译配置参数,推荐在方案中设置好默认编译配置。
部分规则需编译后运行,如果未填写配置编译命令,会因缺失编译参数导致检测任务无效。
在检测规则列表中,需要编译的规则包(如Java安全检测)会在描述中标注编译要求,根据检测规则提示进行编译配置即可。 单击默认编译配置后,在弹出的对话框中选择编译环境(如 JDK 1.8、OPENJDK 11、JDK 17、JDK 21),单击确定保存。
-
步骤二:按需调整方案内容
选择检测方案后,可以按需调整方案中已有的规则内容和方案配置。
方案创建者或Codeup组织管理员可以编辑和删除方案,其他人只能查看和复制方案。
-
调整检测规则内容。
针对每一条规则,支持编辑其问题等级,部分规则允许自定义检测参数,如通过正则表达式限制检测范围。同时还支持停用不适合的规则或重新启用规则。
警告停用规则有以下影响:
-
规则已发现的问题将在下一次检测后自动关闭。
-
运行当前检测方案时将不再执行对应规则。
例如,单击规则行可打开编辑对话框,在问题等级下拉框中调整等级(严重、警告、建议),或在规则详情中配置自定义正则参数。
-
-
检测方案关联检测任务。进入检测方案详情页的关联代码页签,若暂未关联检测任务,单击创建检测任务按钮进行关联。
新建检测任务。在弹出的新建检测任务对话框中,选择代码源类型(如 Codeup),选择代码库和检测方案,勾选触发方式(提交触发或合并请求触发),单击新建并执行。
-
针对检测方案的修改行为,都将记录在方案的变更历史中,供追溯查看。
-
调整检测方案设置。
在方案的【设置】页面,可以调整方案的名称,填写方案的描述,设置检测的文件白名单,单击保存。
白名单路径下的文件将自动跳过检测,即不执行检测。
重要删除方案时,需要确保当前方案未与任何检测任务关联,否则需要先与检测任务解绑,然后删除方案,避免对运行的检测任务造成影响。
步骤三:将检测方案关联至代码库
将方案关联到代码库后形成可运行的检测任务,一个代码库最多创建一个检测任务,该任务可选择不同分支多次运行。
-
。进入检测任务页面,可查看已有任务的运行状态和检测统计。
-
选择合适的检测任务项。在检测方案下拉列表中,可选择内置方案(如 Java推荐检测方案、Python推荐检测方案)或自定义方案。
-
除了手动触发外,支持设置检测任务的自动触发方式,包括提交触发方式和合并请求触发,若选择提交触发,需要指定关注的分支,支持正则匹配。若选择合并请求触发,则该库发生的合并请求,将对源分支合并到目标分支的代码进行检测。
说明-
针对运行时需要编译的检测包,需要设置检测编译参数,如果在检测方案上已经设置过「默认编译配置」,则会默认继承自动填写至检测任务创建界面,同时也支持在检测任务侧对编译配置进行修改,该修改仅影响当前检测任务,不影响检测方案。
-
勾选「已阅读并同意检测服务协议」后即可立即新建并针对默认分支执行一次代码检测。
-
后续也可以通过自动触发或手动触发的方式对指定分支进行检测。
-
步骤四:查看检测结果
-
基于检测任务查看检测结果。
进入检测任务,选择概览,查看当前分支最近一次成功的全量检测结果和问题列表。
-
概览内容:
-
检测结果:通过状态,以及对应的问题个数和门禁阈值。
-
问题总览:查看未解决的问题个数和已解决的问题个数。
-
问题严重等级分布:警告、严重和建议问题个数分布情况。
-
问题类型分布:安全和规范类问题个数分布。
-
引入人分布:列出不同用户引入的各类问题数量。
-
严重问题最多的规则分布:命中严重问题数最多的规则排名。
-
问题趋势:查看各等级问题的存量趋势。
-
-
问题列表
问题列表以严重等级和解决状态排序,单击问题行可查看问题详情,针对不关心的问题可以进行忽略,忽略后该问题在该分支将不会再报出。
-
运行历史
代码检测使用云效Flow流水线运行,针对检测运行失败的情况,支持单击页面查看运行日志前往云效流水线产品Flow查看对应错误日志快速定位和解决问题。
如果最近一次检测运行失败了,进入检测任务详情将保留最近一次成功的检测结果,同时提醒最近一次检测失败和时间信息,支持前往执行日志查看问题并快速解决。
-
-
在代码库提交和合并请求中查看检测结果
-
提交检测结果
在提交、分支视图下,如果对应Commit有存在代码检测结果,在列表上可以通过卡片快捷查看,单击可查看检测问题详情。
-
合并请求检测结果
当选择了合并请求触发,在合并请求列表和合并详情的合并条件中可以看到自动化检测的结果。
运行完成后,单击「查看详情」可以在当前合并请求的文件变更视图中查看检测出的问题详情,单击可直接跳转至问题代码行。
-
常见问题
1. 如何将检测设置为合并请求卡点?
代码检测作为评审的辅助手段,可以减轻代码评审的成本,通过自动化的方式对代码中的规范、安全漏洞进行筛查,并快速暴露出来。
在合并请求中,除了人工评审之外,支持将代码检测作为合并代码前的卡点,当检测设置的门禁不通过时,不允许任何人合并代码,避免质量不达标的代码被合并到生产分支。
步骤一:设置检测阈值门禁
首先,需要设置期望卡点的门禁阈值。
进入当前库的检测任务中,可以看到合并请求门禁设置项,默认不允许存在严重问题,不限警告和建议问题数,可以根据业务情况自行修改。
步骤二:设置保护分支卡点
接下来,单击「前往设置合并请求卡点」,或者打开库设置-分支设置-保护分支规则。
针对期望被合并保护的分支新建保护分支规则,选择分支名,然后在规则设置中打开「要求合并前通过自动化执行检查」,勾选代码检测任务。
步骤三:查看合并检测卡点
当检测任务被设置为目标分支的卡点之后,针对被保护的目标分支发起的合并都需要通过检测。检测的内容为基于源分支需要合并到目标分支的差异代码。
运行结束后可以点击「查看详情」跳转查看代码行内的问题。
对于用于合并请求卡点的检测任务,如果由于没有设置检测任务的自动触发条件导致检测未运行,可以在页面手动点击「立即运行」触发执行,对待合并代码内容进行检测。
在合并请求列表中,未通过检测的合并请求会显示不通过标记,可查看关联检测任务的运行状态。
在合并请求详情页的合并条件中,可查看检测任务执行状态和问题数量,未通过时需修复问题后重新触发检测。
卡点的检测任务被删除的处理说明
如果检测任务已经被设置为卡点,即使手动删除了检测任务,合并的检测卡点仍然是生效的,避免没经过检测的代码被合并为保护分支。
此时合并请求中旧的已删除的检测任务卡点是失效状态,这种情况需要管理员在当前库新建检测任务,新的检测任务将自动替换旧的检测任务继续作为合并请求卡点生效。
2. 代码检测资源消耗如何计算?
检测将使用云效Flow流水线资源进行运行,运行的并发数和运行时长将通过流水线资源进行计算,在流水线资源额度内可正常使用检测,如果超出流水线资源额度,可开通资源按量计费获取更多流水线运行资源。
具体当月资源消耗情况可前往云效流水线Flow页面左下角「资源」中进行查看。
3.如何关闭代码检测?
进入代码库,删除对应仓库的检测任务即可,对应系统流水线将自动删除。
在检测任务详情页中,单击任务设置,在基本信息页签底部的删除任务区域,单击删除按钮即可。