代码扫描、提交方法及代码扫描服务器、客户端和服务端技术

技术编号:33141868 阅读:8 留言:0更新日期:2022-04-22 13:52
本发明专利技术公开一种代码扫描、提交方法及代码扫描服务器、客户端和服务端,该代码扫描方法包括:接收客户端的预推送钩子发送的第一代码提交信息;接收服务端的预接收钩子发送的第二代码提交信息和代码变动文件;基于第一代码提交信息和第二代码提交信息获取与代码变动文件相关联的基线代码,并基于代码变动文件确定基线代码中的修改部分;对基线代码中的修改部分进行扫描,得到第一扫描结果;对代码变动文件中的代码进行扫描,得到第二扫描结果;将第一扫描结果和第二扫描结果进行比较,得到本次推送操作的扫描结果,预接收钩子获取本次推送操作的扫描结果,以用于确定本次推送操作是否成功。该方法能够提高扫描效率和扫描精确性。该方法能够提高扫描效率和扫描精确性。该方法能够提高扫描效率和扫描精确性。

【技术实现步骤摘要】
代码扫描、提交方法及代码扫描服务器、客户端和服务端


[0001]本申请涉及计算机
,具体地涉及一种代码扫描、提交方法及代码扫描服务器、客户端和服务端。

技术介绍

[0002]现有主流的代码扫描方式都是基于整个代码库或者基于不同的分支之间的diff进行代码扫描(diff同difference是不同的意思,此处diff表示代码之间的差异)。通过调用静态代码扫描工具等工具进行代码扫描,然后生成代码扫描报告。
[0003]例如,一种常见的方案是通过定时任务或相似的方式,定期触发代码的全量扫描,该方式扫描不够及时且全量扫描耗时非常严重。另一种常见的方案是在代码已经提交到系统中之后,再进行代码检查,该方式是一种事后策略,代码推送(push)成功后,再检查代码是否存在问题,此时问题代码已经引入了代码库。再一种常见的方案是在代码push操作中获取增量代码和目标分支进行合并成为完整的代码,并进行代码扫描操作,该方式相当于对完整的代码库进行扫描,和前述的第一种方案相比更为及时,但仍是扫描了全量的代码,耗时严重。

技术实现思路

[0004]为了解决上述问题中的至少一个而提出了本申请。根据本申请一方面,提供了一种代码扫描方法,所述方法包括:接收客户端的预推送钩子发送的第一代码提交信息,所述第一代码提交信息是用户在所述客户端针对本地提交的代码发起推送操作后由所述预推送钩子获取的;接收服务端的预接收钩子发送的第二代码提交信息和代码变动文件,所述第二代码提交信息和所述代码变动文件是所述预接收钩子从所述客户端接收到所述本地提交的代码后获取的;基于所述第一代码提交信息和所述第二代码提交信息获取与所述代码变动文件相关联的基线代码,并基于所述代码变动文件确定所述基线代码中的修改部分;对所述基线代码中的修改部分进行扫描,得到第一扫描结果;将所述代码变动文件中的代码加入所述基线代码中生成所述本地提交的代码,对所述代码变动文件中的代码进行扫描,得到第二扫描结果;将所述第一扫描结果和所述第二扫描结果进行比较,得到本次推送操作的扫描结果。
[0005]其中,所述的客户端包括但不限于linux操作系统(centOS、ubuntu等)、windows操作系统、macOS操作系统等各种可以提交代码的介质。
[0006]在本申请的一个实施例中,所述方法还包括:在得到所述扫描结果后,调用所述预接收钩子中开放的接口,以主动向所述预接收钩子通知扫描完成,从而使得所述预接收钩子获取本次推送操作的扫描结果,以用于确定所述本次推送操作是否成功;或者在得到所述扫描结果后,所述预接收钩子通过轮询的方式获取所述本次推送操作的扫描结果,以用于确定所述本次推送操作是否成功。
[0007]在本申请的一个实施例中,所述将所述第一扫描结果和所述第二扫描结果进行比
较,得到本次推送操作的扫描结果,包括:对于所述第二扫描结果中的每个程序错误,确定所述程序错误所在的代码行是否是相对于所述基线代码的新增行;如果所述程序错误所在的代码行不是相对于所述基线代码的新增行,则确定所述程序错误不是新增的程序错误;如果所述程序错误所在的代码行是相对于所述基线代码的新增行,则确定所述程序错误为新增的程序错误,所有所述新增的程序错误作为本次推送操作的扫描结果。
[0008]在本申请的一个实施例中,当所述代码变动文件中的代码是所述基线代码中不存在的新增代码时,不存在所述修改部分和所述第一扫描结果,将所述第二扫描结果作为所述本次推送操作的扫描结果。
[0009]在本申请的一个实施例中,当所述代码变动文件指示所述本地提交的代码是所述基线代码被删除了部分代码而得到的时,不执行代码扫描。
[0010]在本申请的一个实施例中,所述第一代码提交信息包括用户名、本地提交标识符、远端提交标识符和代码库地址;所述第二代码提交信息包括用户名、本地提交标识符、远端提交标识符和目标代码分支名。
[0011]在本申请的一个实施例中,所述代码变动文件为带相对路径的代码变动文件所构成的压缩文件。
[0012]在本申请的一个实施例中,所述基线代码是预先从所述服务端下载并经存储的。
[0013]在本申请的一个实施例中,所述方法还包括:对失败的所述推送操作呈现一键推送按钮,所述一键推送按钮在被用户点击后,将强制提交所述本地提交的代码。
[0014]在本申请的一个实施例中,所述一键推送按钮仅对预设权限级别的用户可用。
[0015]在本申请的一个实施例中,所述客户端为git客户端,所述服务端为gitlab服务端、github服务端、Gitea代码托管服务端、GitkKaken代码托管服务端或者Beanstalk代码托管服务端。
[0016]根据本申请另一方面,提供了一种代码提交方法,所述方法包括:在用户针对本地提交的代码发起推送操作时,由经配置的预推送钩子进行信息截取,以获取第一代码提交信息;将所述第一代码提交信息发送至代码扫描服务器,从而由所述代码扫描服务器执行上述的代码扫描方法。
[0017]根据本申请再一方面,提供了一种代码提交方法,所述方法包括:在从客户端接收到本地提交的代码后,由经配置的预接收钩子进行提交拦截,以获取第二代码提交信息和与所述本地提交的代码相关联的基线代码;基于所述本地提交的代码和所述基线代码确定代码变动部分,以生成代码变动文件;将所述第二代码提交信息和所述代码变动文件传送至代码扫描服务器,从而由所述代码扫描服务器执行上述的代码扫描方法。
[0018]根据本申请又一方面,提供了一种代码扫描服务器,所述代码扫描服务器用于执行上述的代码扫描方法。
[0019]根据本申请再一方面,提供了一种客户端,所述客户端用于执行上述的代码提交方法。
[0020]根据本申请又一方面,提供了一种服务端,所述服务端用于执行上述的代码提交方法。
[0021]根据本申请再一方面,提供了一种代码提交服务器,所述服务器包括:接收模块,用于接收客户端的预推送钩子发送的第一代码提交信息,并接收服务端的预接收钩子发送
的第二代码提交信息和代码变动文件,其中所述第一代码提交信息是用户在所述客户端针对本地提交的代码发起推送操作后由所述预推送钩子获取的,所述第二代码提交信息和所述代码变动文件是所述预接收钩子从所述客户端接收到所述本地提交的代码后获取的;扫描模块,用于基于所述第一代码提交信息和所述第二代码提交信息获取与所述代码变动文件相关联的基线代码,基于所述代码变动文件确定所述基线代码中的修改部分,对所述基线代码中的修改部分进行扫描,得到第一扫描结果,并将所述代码变动文件中的代码加入所述基线代码中生成所述本地提交的代码,对所述代码变动文件中的代码进行扫描,得到第二扫描结果;比较模块,用于将所述第一扫描结果和所述第二扫描结果进行比较,得到本次推送操作的扫描结果。
[0022]根据本申请又一方面,提供了一种客户端,所述客户端包括:信息截取模块,用于在用户针对本地提交的代码发起推送操作时,由经配置的预推送钩子进行信息截取,以获取第一代本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种代码扫描方法,其特征在于,所述方法包括:接收客户端的预推送钩子发送的第一代码提交信息,所述第一代码提交信息是用户在所述客户端针对本地提交的代码发起推送操作后由所述预推送钩子获取的;接收服务端的预接收钩子发送的第二代码提交信息和代码变动文件,所述第二代码提交信息和所述代码变动文件是所述预接收钩子从所述客户端接收到所述本地提交的代码后获取的;基于所述第一代码提交信息和所述第二代码提交信息获取与所述代码变动文件相关联的基线代码,并基于所述代码变动文件确定所述基线代码中的修改部分;对所述基线代码中的修改部分进行扫描,得到第一扫描结果;将所述代码变动文件中的代码加入所述基线代码中生成所述本地提交的代码,对所述代码变动文件中的代码进行扫描,得到第二扫描结果;将所述第一扫描结果和所述第二扫描结果进行比较,得到本次推送操作的扫描结果。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:在得到所述扫描结果后,调用所述预接收钩子中开放的接口,以主动向所述预接收钩子通知扫描完成,从而使得所述预接收钩子获取本次推送操作的扫描结果,以用于确定所述本次推送操作是否成功;或者在得到所述扫描结果后,所述预接收钩子通过轮询的方式获取所述本次推送操作的扫描结果,以用于确定所述本次推送操作是否成功。3.根据权利要求1所述的方法,其特征在于,所述将所述第一扫描结果和所述第二扫描结果进行比较,得到本次推送操作的扫描结果,包括:对于所述第二扫描结果中的每个程序错误,确定所述程序错误所在的代码行是否是相对于所述基线代码的新增行;如果所述程序错误所在的代码行不是相对于所述基线代码的新增行,则确定所述程序错误不是新增的程序错误;如果所述程序错误所在的代码行是相对于所述基线代码的新增行,则确定所述程序错误为新增的程序错误,所有所述新增的程序错误作为本次推送操作的扫描结果。4.根据权利要求1所述的方法,其特征在于,当所述代码变动文件中的代码是所述基线代码中不存在的新增代码时,不存在所述修改部分和所述第一扫描结果,将所述第二扫描结果作为所述本次推送操作的扫描结果。5.根据权利要求1所述的方法,其特征在于,当所述代码变动文件指示所述本地提交的代码是所述基线代码被删除了部分代码而得到的时,不执行代码扫描。6.根据权利要求1所述的方法,其特征在于,所述第一代码提交信息包括用户名、本地提交标识符、远端提交标识符和代码库地址;所述第二代码提交信息包括用户名、本地提交标识符、远端提交标识符和目标代码分支名。7.根据权利要求1所述的方法,其特征在于,所述代码变动文件为带相对路径的代码变动文件所构成的压缩文件。8.根据权利要求1所述的方法,其特征在于,所述基线代码是预先从所述服务端下载并经存储的。
9.根据权利要求1

8中的任一项所述的方法,其特征在于,所述方法还包括:对失败的所述推送操作呈现一键推送按钮,所述一键推送按钮在被用户点击后,将强制提交所述本地提交的代码。10.根据权利要求9所述的方法,其特征在于,所述一键推送按钮仅对预设权限级别的用户可用。11.根据权利要求1

6中的任一项所述的方法,其特征在于,所述客户端为git客户端,所述服务端为gitlab服务端、github服务端、Gitea代码托管服务端、GitkKaken代码托管服务端或者Beanstalk代码托管服务端。12....

【专利技术属性】
技术研发人员:宫磊王浩潘松
申请(专利权)人:科大讯飞股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1