本技术涉及软件工程,尤其是涉及一种基于git的源代码差异自动分析方法、装置及存储介质。
背景技术:
1、随着企业对软件开发流程的安全管控要求的日益严格,特别是在源代码管理、制品构建及制品上线等核心环节,众多企业纷纷要求持续集成工具必须能自动追踪并分析与每次构建的制品直接相关的源代码库、分支、变更文件列表、变更的代码行数,并提供报告展示这些源代码相关的变更数据。
2、在当前的软件工程实践中,源代码管理普遍采用基于git协议的版本控制系统。该系统通过commit和push操作,将开发人员在本地计算机上编写的软件源代码提交至远程服务器上的git存储库,并使用唯一的commit id来标识每次提交。这一机制为软件开发过程中的版本控制提供了坚实的基础。
3、为了识别源代码变更列表,git协议提供了一组命令。然而,在使用这些命令时,存在以下三个显著的问题:首先,由于git按时间排序线性存储源代码提交记录,包含了整个源代码库的全部历史提交记录,如果没有特殊手段,当前只能靠人工根据提交记录的日志来识别提交记录的起始点。其次,它高度依赖人工操作,需要用户在命令行中输入一系列命令来查询提交记录,并手动记录相关信息,这不仅增加了操作复杂度可能导致人为错误,处理过程还非常耗时。第三,当多次提交中包含对相同文件的变更时,命令输出的信息还需要人工校验去重。这种手动处理方式无法与持续集成工具结合,导致原本应自动化的制品构建过程中的关键环节仍需人工介入,严重影响了整体效率和制品上线的速度,也与企业推崇的效能提升的宗旨相悖。
4、因此,为了解决这些问题,我们需要寻求一种更加高效、自动化的解决方案,在保留开发人员原有协作习惯的前提下尽可能减少人工操作,增加自动化处理步骤,以实现对源代码变更数据的精确追踪和识别。这将有助于显著提升软件开发流程的管控水平,优化整体效率、加快制品上线的速度,更好地满足企业安全管控和效能提升的诉求,为企业的持续发展和竞争力提升提供坚实支撑。
技术实现思路
1、基于此,本技术实施例提供了一种基于git的源代码差异自动分析方法、装置及存储介质,以解决相关技术存在的问题,技术方案如下:
2、第一方面,本技术实施例提供了一种基于git的源代码差异自动分析方法,包括:
3、建立需求关联关系模型,所述需求关联关系模型用于在指导在需求管理系统中需求关联关系表;
4、在需求管理系统中建立需求与git源代码库及分支的关联关系,所述关联关系指需求与git源代码库、源分支、目标分支、基线commit-id之间的关联关系,所述git指一种分布式的软件源代码版本管理系统,所述git源代码库指在git中存储的源代码库仓库,所述基线commit-id指git源代码库中的一次提交对应的提交id;
5、在需求管理系统中监听git源代码库的推送事件,所述推送事件指git源代码库中webhook功能中的一个事件类型,表示用户向git源代码库推送代码的行为;
6、建立代码提交信息模型,所述代码提交信息模型用于指导在需求管理系统中创建代码提交信息表;
7、在持续集成系统的流水线中自动分析源代码,获取提交差异数据,所述流水线指软件研发人员使用的一种自动化持续集成系统,所述差异数据指git源代码库中介于两次提交之间的提交记录、变更源代码文件清单、变更代码行数、git源代码库、分支;
8、在持续集成系统的流水线中制作分析报告,并将分析报告关联到制品上,所述分析报告指记录需求、差异数据的报告文件。
9、建立需求与git源代码库、源分支、目标分支、基线的关联关系模型,软件研发人员使用需求关联关系模型指导,在需求管理系统中创建对应的需求关联关系表。
10、该模型必须遵循以下三点约束:一、同一个git源代码库和目标分支仅能关联一个需求;二、同一个git源代码库和源分支可以关联多个需求;三、同一需求仅能关联一个git源代码库、源分支、目标分支。
11、需求管理系统中的需求支持创建需求与git源代码库、源分支和目标分支的关联关系,当关联关系创建成功后,需求管理系统调用git接口读取源分支的最新提交的commit-id,将commit-id作为基线commit-id更新到关联关系上;
12、需求管理系统中的需求支持在指定的git源代码库上创建分支并建立关联关系,创建时选择git源代码库、源分支、填写自定义目标分支名,提交后,需求管理系统使用自定义目标分支名基于源分支创建一个新分支,创建成功后,需求管理系统记录需求与所述git源代码库、源分支、自定义目标分支名之间的关联关系,之后,需求管理系统调用git接口读取源分支的最新提交的commit-id,将commit-id作为基线commit-id更新到关联关系上。
13、在git源代码库的webhook配置中选择推送事件并查看事件消息体,需求管理系统根据推送事件消息体开发推送事件监听接口,并将推送事件监听接口配置到推送事件的勾子上;
14、git源代码库将在接收到用户推送的代码提交时,查找推送事件配置,找到匹配的事件配置后组装事件消息体并触发推送事件,回调推送事件监听接口,需求管理系统接收到git源代码库的推送事件回调后,解析推送事件监听接口消息体,获取本次推送的git源代码库、分支及其最新commit-id,需求管理系统提供需求条目的查询方法,该方法接收git源代码库和源分支两个参数,分别传入推送事件消息体中解析出来的git源代码库和分支,查询所有关联的需求,并将关联需求的基线commit-id更新为最新commit-id,这一步将保证需求关联的基线commit-id始终与git源代码库保持同步。
15、建立需求与git源代码库、分支、需求标识、新增的代码提交记录列表、变更文件清单、变更的代码行数的代码提交信息模型,软件研发人员使用提交信息模型指导,在需求管理系统中创建对应的代码提交信息表。
16、在持续集成系统中,新建构建流水线,流水线配置git源代码库和分支信息;
17、执行流水线时,流水线按配置的git源代码库和分支拉取源代码,随后通过需求查询插件调用需求管理系统的需求条目查询接口,该接口接收git源代码库和目标分支两个参数,分别传入流水线配置的git源代码库和分支,获取本次构建的源代码对应的需求,再调用需求管理系统的需求详情查询接口,传入需求标识,获取需求详细信息,解析需求详细信息,获取需求关联的基线commit-id;
18、在流水线中通过提交信息查询插件调用git命令,计算本次构建的源代码中从基线commit-id开始新增的提交记录列表、变更文件清单、变更的代码行数,调用的git命令为:git log --pretty=oneline --numstat commit_id..head,其中,commit_id应替换为希望查询的起始commit-id,head代表当前分支的最新commit-id,--stat参数使得命令的输出中包含了每次提交中各个文件的变更统计,这些变更统计清楚地展示了哪些文件被修改、添加或者删除;
19、将新增的提交记录列表、变更文件清单、变更的代码行数,连同需求标识、git源代码库、分支合并,之后调用需求管理系统的新增需求变更记录接口,将数据写入到需求管理系统的代码提交信息表中。
20、执行流水线时执行到构建命令,将源代码编译构建后形成二进制包通过制品归档接口归档到制品库中;
21、执行流水线时通过下载分析报告插件调用需求管理系统下载分析报告接口,接口将根据用户传入的参数生成提交信息分析报告,流水线接收到报告后,存储报告并提供给用户下载;
22、将本次构建相关的需求、源代码相关信息、分析报告通过元数据写入接口写入到制品元数据上。
23、第二方面,本技术实施例提供了一种管理装置,包括:
24、构建单元:建立需求关联关系模型,所述需求关联关系模型用于在指导在需求管理系统中创建需求关联关系表;建立代码提交信息模型,所述代码提交信息模型用于指导在需求管理系统中创建代码提交信息表;
25、处理单元:用于提供推送事件监听接口,所述推送事件监听接口用于监听git源代码库的代码提交事件;提供新增需求变更记录接口,所述新增需求变更记录接口用于记录提交记录列表、变更文件清单、变更的代码行数,连同需求标识、git源代码库、分支;下载分析报告接口,所述下载分析报告接口用于根据用户传入的参数生成提交信息分析报告;
26、在一种可能的设计中,所述构建单元具体用于:
27、建立需求与git源代码库、源分支、目标分支、基线的关联关系模型,软件研发人员使用需求关联关系模型指导,在需求管理系统中创建对应的需求关联关系表;
28、所述需求关联关系模型必须遵循以下三点约束:一、同一个git源代码库和目标分支仅能关联一个需求;二、同一个git源代码库和源分支可以关联多个需求;三、同一需求仅能关联一个git源代码库、源分支、目标分支。
29、建立需求与git源代码库、分支、需求标识、新增的代码提交记录列表、变更文件清单、变更的代码行数的提交信息模型,软件研发人员使用提交信息模型指导,在需求管理系统中创建对应的代码提交信息表。
30、在一种可能的设计中,所述处理单元具体用于:
31、需求管理系统中的需求支持创建需求与git源代码库、源分支和目标分支的关联关系,当关联关系创建成功后,需求管理系统调用git接口读取源分支的最新提交的commit-id,将commit-id作为基线commit-id更新到关联关系上;
32、需求管理系统中的需求支持在指定的git源代码库上创建分支并建立关联关系,创建时选择git源代码库、源分支、填写自定义目标分支名,提交后,需求管理系统使用自定义目标分支名基于源分支创建一个新分支,创建成功后,需求管理系统记录需求与所述git源代码库、源分支、自定义目标分支名之间的关联关系,之后,需求管理系统调用git接口读取源分支的最新提交的commit-id,将commit-id作为基线commit-id更新到关联关系上。
33、在一种可能的设计中,所述处理单元还用于:
34、在git源代码库的webhook配置中选择推送事件并查看事件消息体,需求管理系统根据推送事件消息体开发推送事件监听接口,并将推送事件监听接口配置到推送事件的勾子上;
35、git源代码库将在接收到用户推送的代码提交时,查找推送事件配置,找到匹配的事件配置后组装事件消息体并触发推送事件,回调推送事件监听接口,需求管理系统接收到git源代码库的推送事件回调后,解析推送事件监听接口消息体,获取本次推送的git源代码库、分支及其最新commit-id,需求管理系统提供需求条目的查询方法,该方法接收git源代码库和源分支两个参数,分别传入推送事件消息体中解析出来的git源代码库和分支,查询所有关联的需求,并将关联需求的基线commit-id更新为最新commit-id,这一步将保证需求关联的基线commit-id始终与git源代码库保持同步。
36、在一种可能的设计中,所述处理单元还用于:
37、在持续集成系统中,新建构建流水线,流水线配置git源代码库和分支信息;
38、执行流水线时,流水线按配置的git源代码库和分支拉取源代码,随后通过需求查询插件调用需求管理系统的需求条目查询接口,该接口接收git源代码库和目标分支两个参数,分别传入流水线配置的git源代码库和分支,获取本次构建的源代码对应的需求,再调用需求管理系统的需求详情查询接口,传入需求标识,获取需求详细信息,解析需求详细信息,获取需求关联的基线commit-id;
39、在流水线中通过提交信息查询插件调用git命令,计算本次构建的源代码中从基线commit-id开始新增的提交记录列表、变更文件清单、变更的代码行数,调用的git命令为:git log --pretty=oneline --numstat commit_id..head,其中,commit_id应替换为希望查询的起始commit-id,head代表当前分支的最新commit-id,--stat参数使得命令的输出中包含了每次提交中各个文件的变更统计,这些变更统计清楚地展示了哪些文件被修改、添加或者删除;
40、将新增的提交记录列表、变更文件清单、变更的代码行数,连同需求标识、git源代码库、分支合并,之后调用需求管理系统的新增需求变更记录接口,将数据写入到需求管理系统的代码提交信息表中。
41、在一种可能的设计中,所述处理单元还用于:
42、执行流水线时执行到构建命令,将源代码编译构建后形成二进制包通过制品归档接口归档到制品库中;
43、执行流水线时通过下载分析报告插件调用需求管理系统下载分析报告接口,接口将根据用户传入的参数生成提交信息分析报告,流水线接收到报告后,存储报告并提供给用户下载;
44、将本次构建相关的需求、源代码相关信息、分析报告通过元数据写入接口写入到制品元数据上。
45、第三方面,本技术实施例还提供了一种计算机装置,包括:存储器和处理器。该存储器中存储指令,该指令由该处理器加载并执行,以实现上述各方面任一种实施方式中的方法。其中,该存储器和该处理器通过内部连接通路互相通信。
46、第四方面,本技术实施例还提供了一种计算机可读存储介质,计算机可读存储介质内存储有计算机程序,计算机程序被计算机执行时,实现上述各方面任一种实施方式中的方法。
47、上述技术方案中的优点或有益效果至少包括:
48、相较于现有技术而言,本发明中通过建立需求关联关系模型,需求关联关系模型用于在指导在需求管理系统中需求关联关系表,需求管理系统为企业中管理软件开发需求的应用系统;在需求管理系统中建立关联关系,关联关系指需求与git源代码库、源分支、目标分支、基线commit-id之间的关联关系,git指一种分布式的软件源代码管理系统,git源代码库指在git中存储的源代码库仓库,基线commit-id指git源代码库中的一次提交对应的提交id;在需求管理系统中监听git源代码库的推送事件,推送事件指git源代码库中webhook功能中的一个事件类型,表示用户向git源代码库推送代码的行为;建立代码提交信息模型,代码提交信息模型用于指导在需求管理系统中创建代码提交信息表;在流水线中自动分析源代码,获取提交差异数据,流水线指软件研发人员使用的一种自动化持续集成系统,差异数据指git源代码库中介于两次提交之间的提交记录、变更源代码文件清单、变更代码行数、git源代码库、分支;在流水线中制作分析报告,并将分析报告关联到制品上,分析报告指记录需求、差异数据的报告文件。通过巧妙运用需求管理系统、git、持续集成系统及其扩展插件、制品库,可以实现四方系统数据的有效整合,这不仅便于自动化收集需求,还能关联到git源代码库中的提交信息,包括变更的代码文件、代码行数等详细数据,将数据收集的过程由手动转为自动,从而显著提升软件开发流程的管控水平,优化整体效率、加快制品上线的速度,更好地满足企业安全管控和效能提升的诉求,为企业的持续发展和竞争力提升提供坚实支撑。
49、上述概述仅仅是为了说明书的目的,并不意图以任何方式进行限制。除上述描述的示意性的方面、实施方式和特征之外,通过参考附图和以下的详细描述,本技术进一步的方面、实施方式和特征将会是容易明白的。
1.一种基于git的源代码差异自动分析方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,建立需求关联关系模型,包括:
3.根据权利要求1所述的方法,其特征在于,在需求管理系统中建立需求与git源代码库及分支的关联关系,包括:
4.根据权利要求1所述的方法,其特征在于,在需求管理系统中监听git源代码库的提交事件,包括:
5.根据权利要求1所述的方法,其特征在于,建立代码提交信息模型,包括:
6.根据权利要求1所述的方法,其特征在于,在持续集成系统的流水线中自动分析源代码,获取差异数据,包括:
7.据权利要求1所述的方法,其特征在于,在持续集成系统的流水线中制作分析报告,并将全部数据关联到制品上,包括:
8.一种管理装置,其特征在于,包括:至少一个存储器和至少一个处理器;
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有至少一个程序;当所述至少一个程序被处理器执行时,实现如权利要求1-7任一项所述的方法。
