CN110750502A - 构件处理方法和装置 - Google Patents

构件处理方法和装置 Download PDF

Info

Publication number
CN110750502A
CN110750502A CN201810813447.9A CN201810813447A CN110750502A CN 110750502 A CN110750502 A CN 110750502A CN 201810813447 A CN201810813447 A CN 201810813447A CN 110750502 A CN110750502 A CN 110750502A
Authority
CN
China
Prior art keywords
component
code
stored
file name
warehouse
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201810813447.9A
Other languages
English (en)
Inventor
刘凯
王颖
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Qihoo Technology Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201810813447.9A priority Critical patent/CN110750502A/zh
Publication of CN110750502A publication Critical patent/CN110750502A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了构件处理方法和装置。所述方法包括:获取待存储的构件;按本地存储规则确定该构件的本地存储路径;根据所述本地存储路径和文件名生成规则,生成所述构件在私有云上的文件名;将所述构件按生成的文件名存储至所述私有云中。该技术方案对现有的构件仓库的存储策略进行了改进,既能够不对已有的本地存储规则进行大的更改变动,又能够实现将构件正常存储到私有云这类大容量存储介质上,实现了构件的海量存储和统一管理。

Description

构件处理方法和装置
技术领域
本发明涉及计算机技术领域,具体涉及构件处理方法和装置。
背景技术
构件是软件开发过程中根据代码生成的,可以实现特定的功能。例如,JAVA的档案文件Jar包就是一种构件。构件可以被复用,因此在软件开发过程中可以依赖其他人开发的构件实现一些功能,避免了重复开发,这也就对构件的管理产生了挑战。目前有一些构件仓库可以实现构件的管理,但只能实现在单台设备上的构件存储,容量有限,不能满足需求。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的构件处理方法和装置。
依据本发明的一个方面,提供了一种构件处理方法,包括:
获取待存储的构件;
按本地存储规则确定该构件的本地存储路径;
根据所述本地存储路径和文件名生成规则,生成所述构件在私有云上的文件名;
将所述构件按生成的文件名存储至所述私有云中。
可选地,所述获取待存储的构件包括:
从代码仓库获取与待存储的构件对应的代码;
根据获取的代码打包生成待存储的构件。
可选地,所述从代码仓库获取与待存储的构件对应的代码包括:
监听所述代码仓库中的代码保存事件;
当监听到的代码保存事件触发了预设的构件生成规则时,获取与监听到的代码保存事件对应的代码。
可选地,所述获取待存储的构件包括:
提供前端页面,通过所述前端页面接收提交的构件,和/或通过所述前端页面接收与待存储的构件对应的地址,从所述地址获取构件。
可选地,所述根据所述本地存储路径和文件名生成规则,生成所述构件在私有云上的文件名包括:
从所述本地存储路径中提取出一级或多级目录的目录名,在所述文件名中按目录级别依序写入相应的目录名。
可选地,该方法还包括:
将所述构件转换为若干个不同类型的二进制文件,生成与各二进制文件对应的标识;
所述根据所述本地存储路径和文件名生成规则,生成所述构件在私有云上的文件名包括:
根据所述标识和预设的哈希算法生成相应的哈希值,在所述文件名中写入所述哈希值。
可选地,所述生成与各二进制文件对应的标识包括:
根据所述构件自身的文件名生成所述标识。
可选地,该方法还包括:
接收对指定构件的下载请求;
根据所述下载请求在所述私有云中查找出相应的构件并返回。
依据本发明的另一方面,提供了一种构件处理装置,包括:
获取单元,适于获取待存储的构件;
处理单元,适于按本地存储规则确定该构件的本地存储路径;根据所述本地存储路径和文件名生成规则,生成所述构件在私有云上的文件名;
存储单元,适于将所述构件按生成的文件名存储至所述私有云中。
可选地,所述获取单元,适于从代码仓库获取与待存储的构件对应的代码;根据获取的代码打包生成待存储的构件。
可选地,所述获取单元,适于监听所述代码仓库中的代码保存事件;当监听到的代码保存事件触发了预设的构件生成规则时,获取与监听到的代码保存事件对应的代码。
可选地,所述获取单元,适于提供前端页面,通过所述前端页面接收提交的构件,和/或通过所述前端页面接收与待存储的构件对应的地址,从所述地址获取构件。
可选地,所述处理单元,适于从所述本地存储路径中提取出一级或多级目录的目录名,在所述文件名中按目录级别依序写入相应的目录名。
可选地,所述处理单元,还适于将所述构件转换为若干个不同类型的二进制文件,生成与各二进制文件对应的标识;所述根据所述本地存储路径和文件名生成规则,生成所述构件在私有云上的文件名包括:根据所述标识和预设的哈希算法生成相应的哈希值,在所述文件名中写入所述哈希值。
可选地,所述处理单元,适于根据所述构件自身的文件名生成所述标识。
可选地,所述存储单元,还适于接收对指定构件的下载请求;根据所述下载请求在所述私有云中查找出相应的构件并返回。
依据本发明的又一方面,提供了一种电子设备,包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如上述任一所述的方法。
依据本发明的再一方面,提供了一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被处理器执行时,实现如上述任一所述的方法。
由上述可知,本发明的技术方案,通过获取待存储的构件,按本地存储规则确定该构件的本地存储路径,根据本地存储路径和文件名生成规则,生成构件在私有云上的文件名,将构件按生成的文件名存储至私有云中。该技术方案对现有的构件仓库的存储策略进行了改进,既能够不对已有的本地存储规则进行大的更改变动,又能够实现将构件正常存储到私有云这类大容量存储介质上,实现了构件的海量存储和统一管理。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的一种构件处理方法的流程示意图;
图2示出了根据本发明一个实施例的一种构件处理装置的结构示意图;
图3示出了根据本发明一个实施例的电子设备的结构示意图;
图4示出了根据本发明一个实施例的计算机可读存储介质的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的一种构件处理方法的流程示意图。如图1所示,该方法包括:
步骤S110,获取待存储的构件。这里的构件可以是Jar包,在后续的开发过程中可以作为开发其他构件的依赖项,也可以是包含测试配置信息的镜像,可以在虚拟机或是容器中进行部署以完成相应的测试任务。
步骤S120,按本地存储规则确定该构件的本地存储路径。
步骤S130,根据本地存储路径和文件名生成规则,生成构件在私有云上的文件名。
步骤S140,将构件按生成的文件名存储至私有云中。
以Nexus私服为例,其是部署在一个终端例如服务器上实现的。这样就带来了一个问题:单台设备的资源是有限的,例如磁盘大小通常只能以T为单位,这样能够保存的构件数量有限。私有云一般是基于分布式存储开发的,能够满足大量构件的存储需求,然而,现有的构件仓库例如Nexus私服并不支持直接将构件的存储移植到私有云上。
通过分析发现,现有的构件仓库不支持私有云等分布式存储的原因是其设置了一个本地存储规则,例如在两级目录下存储构件。而在私有云中并没有相应的目录,为解决这一问题,在本实施例中实现了先根据本地存储规则确定了构件的本地存储路径,但是并不真的在本地进行存储,而是根据这个本地存储路径和相应的文件名生成规则来生成一个文件名,这样就可以将构件存储到私有云上的同时还满足原有的存储规则,便于查询和读取。
可见,图1所示的方法,其中,通过获取待存储的构件,按本地存储规则确定该构件的本地存储路径,根据本地存储路径和文件名生成规则,生成构件在私有云上的文件名,将构件按生成的文件名存储至私有云中。该技术方案对现有的构件仓库的存储策略进行了改进,既能够不对已有的本地存储规则进行大的更改变动,又能够实现将构件正常存储到私有云这类大容量存储介质上,实现了构件的海量存储和统一管理。
在本发明的一个实施例中,上述方法中,获取待存储的构件包括:从代码仓库获取与待存储的构件对应的代码;根据获取的代码打包生成待存储的构件。
例如在公司的内网中部署私有化的代码仓库,保证代码的安全性。则每次开发人员可以将新版本的代码更新到代码仓库中,进行版本控制。为实现CI(Continuousintegration,持续集成)和CD(Continuous delivery,持续交付),在公司内可能有多个项目,如何实现整体性的管理是需要解决的问题。则采用本发明实施例还可以在满足构件生成条件时,从代码仓库获取与构件对应的代码;根据获取的代码,打包生成构件;将生成的构件保存至构件仓库中;在接收到对指定构件的下载请求时,根据所述下载请求从所述构件仓库中查找出相应的构件并返回,实现了代码在代码仓库中的统一管理,以及构件的自动生成,并且可以在构件仓库中统一管理,开发人员还可以再从构件仓库中获取构件进行后续开发,其中构件仓库中的构件还可以随时被测试人员获取进行测试,实现了以构件仓库为中心的CI、CD闭环,适于大型项目、多个项目的集中化管理,同时也保持了稳定性,提高了开发和测试效率。
在本发明的一个实施例中,上述方法中,从代码仓库获取与待存储的构件对应的代码包括:监听代码仓库中的代码保存事件;当监听到的代码保存事件触发了预设的构件生成规则时,获取与监听到的代码保存事件对应的代码。
例如,在代码仓库中预设基于Hook机制的钩子程序,当代码被更新或是有新代码保存进来时可以被监听到。而如果预先设置要根据哪些代码生成构件,则可以在相应的代码保存事件发生时,拉取相应的代码。
在本发明的一个实施例中,上述方法中,获取待存储的构件包括:提供前端页面,通过前端页面接收提交的构件,和/或通过前端页面接收与待存储的构件对应的地址,从地址获取构件。
这里,构件还可以是在外网服务器中或是在其他存储位置保存的,为了实现构件的统一管理,还可以由用户指定构件的地址,或是由用户主动提交构件,再由构件仓库获取到这些构件并统一保存在私有云上,用户在使用时不需要再去外网服务器获取或是重新开发,提高了开发效率。
在本发明的一个实施例中,上述方法中,根据本地存储路径和文件名生成规则,生成构件在私有云上的文件名包括:从本地存储路径中提取出一级或多级目录的目录名,在文件名中按目录级别依序写入相应的目录名。
例如按照构件仓库的本地存储规则,a.jar这个构件需要存储至vol/chapter这个目录下。则生成的新的文件名可以是vol-chapter-a,再存储至私有云。这种存储方式是不改变构件的原有文件格式。
而在本发明的一个实施例中,上述方法还包括:将构件转换为若干个不同类型的二进制文件,生成与各二进制文件对应的标识;根据本地存储路径和文件名生成规则,生成构件在私有云上的文件名包括:根据标识和预设的哈希算法生成相应的哈希值,在文件名中写入哈希值。
例如,将构件转换为.bytes和.properties两种格式的两个二进制压缩文件进行存储,这两种格式都属于blob,可以使得存储器不需要关心如何去处理仅需要进行存储。例如根据一个a.jar生成相应的.bytes和.properties两个二进制文件,同时生成各自的blobid作为标识。这时在根据blobid进行哈希得到一个哈希值例如为hash(实际并非如此,仅作标识示例作用),则生成的文件可以是vol-chapter-hash.bytes和vol-chapter-hash.properties。
上面的blobid即是根据构件的原文件名生成的,即在本发明的一个实施例中,上述方法中,生成与各二进制文件对应的标识包括:根据构件自身的文件名生成标识。
在本发明的一个实施例中,上述方法还包括:接收对指定构件的下载请求;根据下载请求在私有云中查找出相应的构件并返回。这也就是前面实施例提及的实现了CI、CD的闭环。
而这其中可能还会还可能需要面对的一个问题是如何实现权限控制。须知在一个公司内部可能同时进行多个项目,一般而言是不希望A项目的开发人员能够直接上传代码到B项目的代码仓库中,即相当于在一个代码主仓库中设置有与各项目对应的代码仓库。那么在构件仓库的创建时同样需要考虑这一问题,即A项目的开发人员可以使用A项目和B项目的构件,但是不允许A项目的人员能够向B项目的构件仓库中写入构件。这样就产生了读写权限控制的问题。
在本发明的一个实施例中,上述方法还包括:接收提交的构件仓库创建请求;根据构件仓库创建请求中包含的代码仓库标识,获取与代码仓库标识对应的代码仓库信息,根据代码仓库信息和构件仓库创建请求中包含的用户标识进行鉴权;在鉴权通过后,创建与构件仓库创建请求对应的构件仓库。
通常代码仓库已经有较为成熟的权限控制策略,而在加入了构件仓库后如何进行构件仓库的权限控制,则可以考虑与代码仓库的权限控制进行合理的兼容。在本实施例中给出了构件仓库的创建过程中的权限控制。例如,一个A项目的开发人员希望创建一个构件仓库,则其需要先发送一个包含代码仓库标识的构件仓库创建请求,来表明自己属于哪个项目;这样可以先根据代码仓库标识来获取到代码仓库信息。具体来说,在本发明的一个实施例中,上述方法中,获取与代码仓库标识对应的代码仓库信息包括:通过访问代码主仓库的接口,获取与代码仓库标识对应的代码仓库信息;和/或,通过邮件方式获取与代码仓库标识对应的代码仓库信息。邮件方式可以是自动生成邮件并自动接收邮件分析内容提取代码仓库信息,可以不需要人工干预。
例如A项目的代码仓库可以提供A项目的开发者和管理者的用户标识,再进行鉴权,如果鉴权通过再创建相应的构件仓库。
具体的鉴权方式可以有很多种,在本发明的一个实施例中,上述方法中,代码仓库信息包括一个或多个用户标识,根据代码仓库信息和构件仓库创建请求中包含的用户标识进行鉴权包括:判断构件仓库创建请求中包含的用户标识是否与代码仓库信息中的用户标识匹配,若不匹配则判定为鉴权不通过。
例如构件仓库创建请求中的用户标识为developer1,返回的代码仓库信息中有leader1,developer1,developer2,developer3,示出了A项目的开发人员和组成人员。这样由于提交构件仓库创建请求的用户确实是A项目的成员,则鉴权通过。
当然在其他实施例中还可以要求必须是管理者才可以创建构件仓库。则在本发明的一个实施例中,上述方法中,代码仓库信息中还包括各用户标识对应的用户类型;根据代码仓库信息和构件仓库创建请求中包含的用户标识进行鉴权还包括:若构件仓库创建请求中包含的用户标识是否与代码仓库信息中的一个用户标识匹配时,根据该匹配的用户标识的用户类型进行鉴权。例如匹配的developer1的用户类型是普通开发者而非管理者,则鉴权不通过。
在本发明的一个实施例中,上述方法中,创建与构件仓库创建请求对应的构件仓库包括:创建与构件仓库对应的一个或多个权限控制角色;建立一个或多个用户账户,为各用户账户分别绑定一个权限控制角色。
在本实施例中主要是考虑了两方面的因素:一是对于一个构件仓库,权限的种类一般不复杂,设置权限控制角色方便对权限进行划分。另一方面项目开发人员的流动性较高,设置普通的用户账户控制可能不安全,而将用户账户绑定到权限控制角色上,实现了用户与权限的松耦合,更改起来比较方便。例如,developer1对应的开发者从A项目转去B项目,只需要更改权限控制角色的绑定关系即可。
在本发明的一个实施例中,上述方法中,建立一个或多个用户账户包括:根据代码仓库信息中的用户标识,建立与各用户标识对应的用户账户。也就是一个开发者或是管理者可以有一个用户账户来访问构件仓库。而除了在构件仓库的创建过程中可以建立用户账户,在后续的开发过程中也可以随时建立,例如在本发明的一个实施例中,上述方法中,建立一个或多个用户账户包括:接收包含用户标识和代码仓库标识的构件仓库访问请求;根据代码仓库标识获取与代码仓库标识对应的代码仓库信息,根据代码仓库信息和用户标识进行鉴权;在鉴权通过后,建立与用户标识对应的用户账户。
例如A项目新增的成员希望能够访问A项目的构件仓库,则可以先通过如前述实施例示出的鉴权方式判断其确实属于A项目后,再为其建立一个可以访问A项目的构件仓库的用户账户。
在本发明的一个实施例中,上述方法中,权限控制角色包括如下的一种或多种:开发者角色,访问者角色,管理员角色。
例如赋予开发者角色对构件仓库的读写权限,而访问者角色仅具有读权限,管理员角色具有构件仓库的全部权限。
在本发明的一个实施例中,上述方法还包括:接收构件提交请求,根据构件提交请求中的用户账户信息进行鉴权;在鉴权通过后,将提交的构件保存至相应的构件仓库中。
这一实施例中的鉴权则可以是判断用户是否有上传构件的权限,例如用户对应的仅仅是一个访问者角色,则不能够上传构件,而如果是一个开发者角色则能够上传。类似地,在本发明的一个实施例中,上述方法中,在接收到对指定构件的下载请求时,根据下载请求从构件仓库中查找出相应的构件并返回包括:根据下载请求进行鉴权,在在鉴权通过后,根据下载请求从构件仓库中查找出相应的构件并返回。这一实施例对应于构件下载过程中的鉴权,与前述实施例相类似,在此不再赘述。
图2示出了根据本发明一个实施例的一种构件处理装置的结构示意图。如图2所示,构件处理装置200包括:
获取单元210,适于获取待存储的构件。这里的构件可以是Jar包,在后续的开发过程中可以作为开发其他构件的依赖项,也可以是包含测试配置信息的镜像,可以在虚拟机或是容器中进行部署以完成相应的测试任务。
处理单元220,适于按本地存储规则确定该构件的本地存储路径;根据本地存储路径和文件名生成规则,生成构件在私有云上的文件名;
存储单元230,适于将构件按生成的文件名存储至私有云中。
以Nexus私服为例,其是部署在一个终端例如服务器上实现的。这样就带来了一个问题:单台设备的资源是有限的,例如磁盘大小通常只能以T为单位,这样能够保存的构件数量有限。私有云一般是基于分布式存储开发的,能够满足大量构件的存储需求,然而,现有的构件仓库例如Nexus私服并不支持直接将构件的存储移植到私有云上。
通过分析发现,现有的构件仓库不支持私有云等分布式存储的原因是其设置了一个本地存储规则,例如在两级目录下存储构件。而在私有云中并没有相应的目录,为解决这一问题,在本实施例中实现了先根据本地存储规则确定了构件的本地存储路径,但是并不真的在本地进行存储,而是根据这个本地存储路径和相应的文件名生成规则来生成一个文件名,这样就可以将构件存储到私有云上的同时还满足原有的存储规则,便于查询和读取。
可见,图2所示的装置,其中,通过获取待存储的构件,按本地存储规则确定该构件的本地存储路径,根据本地存储路径和文件名生成规则,生成构件在私有云上的文件名,将构件按生成的文件名存储至私有云中。该技术方案对现有的构件仓库的存储策略进行了改进,既能够不对已有的本地存储规则进行大的更改变动,又能够实现将构件正常存储到私有云这类大容量存储介质上,实现了构件的海量存储和统一管理。
在本发明的一个实施例中,上述装置中,获取单元210,适于从代码仓库获取与待存储的构件对应的代码;根据获取的代码打包生成待存储的构件。
例如在公司的内网中部署私有化的代码仓库,保证代码的安全性。则每次开发人员可以将新版本的代码更新到代码仓库中,进行版本控制。为实现CI(Continuousintegration,持续集成)和CD(Continuous delivery,持续交付),在公司内可能有多个项目,如何实现整体性的管理是需要解决的问题。则在本发明的一个实施例中,上述装置中,存储单元230,还适于接收对指定构件的下载请求;根据下载请求在私有云中查找出相应的构件并返回。实现了代码在代码仓库中的统一管理,以及构件的自动生成,并且可以在构件仓库中统一管理,开发人员还可以再从构件仓库中获取构件进行后续开发,其中构件仓库中的构件还可以随时被测试人员获取进行测试,实现了以构件仓库为中心的CI、CD闭环,适于大型项目、多个项目的集中化管理,同时也保持了稳定性,提高了开发和测试效率。
在本发明的一个实施例中,上述装置中,获取单元210,适于监听代码仓库中的代码保存事件;当监听到的代码保存事件触发了预设的构件生成规则时,获取与监听到的代码保存事件对应的代码。
例如,在代码仓库中预设基于Hook机制的钩子程序,当代码被更新或是有新代码保存进来时可以被监听到。而如果预先设置要根据哪些代码生成构件,则可以在相应的代码保存事件发生时,拉取相应的代码。
在本发明的一个实施例中,上述装置中,获取单元210,适于提供前端页面,通过前端页面接收提交的构件,和/或通过前端页面接收与待存储的构件对应的地址,从地址获取构件。
这里,构件还可以是在外网服务器中或是在其他存储位置保存的,为了实现构件的统一管理,还可以由用户指定构件的地址,或是由用户主动提交构件,再由构件仓库获取到这些构件并统一保存在私有云上,用户在使用时不需要再去外网服务器获取或是重新开发,提高了开发效率。
在本发明的一个实施例中,上述装置中,处理单元220,适于从本地存储路径中提取出一级或多级目录的目录名,在文件名中按目录级别依序写入相应的目录名。
例如按照构件仓库的本地存储规则,a.jar这个构件需要存储至vol/chapter这个目录下。则生成的新的文件名可以是vol-chapter-a,再存储至私有云。这种存储方式是不改变构件的原有文件格式。
在本发明的一个实施例中,上述装置中,处理单元220,还适于将构件转换为若干个不同类型的二进制文件,生成与各二进制文件对应的标识;根据本地存储路径和文件名生成规则,生成构件在私有云上的文件名包括:根据标识和预设的哈希算法生成相应的哈希值,在文件名中写入哈希值。
例如,将构件转换为.bytes和.properties两种格式的两个二进制压缩文件进行存储,这两种格式都属于blob,可以使得存储器不需要关心如何去处理仅需要进行存储。例如根据一个a.jar生成相应的.bytes和.properties两个二进制文件,同时生成各自的blobid作为标识。这时在根据blobid进行哈希得到一个哈希值例如为hash(实际并非如此,仅作标识示例作用),则生成的文件可以是vol-chapter-hash.bytes和vol-chapter-hash.properties。
上面的blobid即是根据构件的原文件名生成的,即在本发明的一个实施例中,上述装置中,处理单元220,适于根据构件自身的文件名生成标识。
而这其中可能还会还可能需要面对的一个问题是如何实现权限控制。须知在一个公司内部可能同时进行多个项目,一般而言是不希望A项目的开发人员能够直接上传代码到B项目的代码仓库中,即相当于在一个代码主仓库中设置有与各项目对应的代码仓库。那么在构件仓库的创建时同样需要考虑这一问题,即A项目的开发人员可以使用A项目和B项目的构件,但是不允许A项目的人员能够向B项目的构件仓库中写入构件。这样就产生了读写权限控制的问题。
在本发明的一个实施例中,上述装置中,存储单元230,还适于接收提交的构件仓库创建请求;根据构件仓库创建请求中包含的代码仓库标识,获取与代码仓库标识对应的代码仓库信息,根据代码仓库信息和构件仓库创建请求中包含的用户标识进行鉴权;在鉴权通过后,创建与构件仓库创建请求对应的构件仓库。
通常代码仓库已经有较为成熟的权限控制策略,而在加入了构件仓库后如何进行构件仓库的权限控制,则可以考虑与代码仓库的权限控制进行合理的兼容。在本实施例中给出了构件仓库的创建过程中的权限控制。例如,一个A项目的开发人员希望创建一个构件仓库,则其需要先发送一个包含代码仓库标识的构件仓库创建请求,来表明自己属于哪个项目;这样可以先根据代码仓库标识来获取到代码仓库信息。具体来说,在本发明的一个实施例中,上述装置中,存储单元230,适于通过访问代码主仓库的接口,获取与代码仓库标识对应的代码仓库信息;和/或,通过邮件方式获取与代码仓库标识对应的代码仓库信息。邮件方式可以是自动生成邮件并自动接收邮件分析内容提取代码仓库信息,可以不需要人工干预。
例如A项目的代码仓库可以提供A项目的开发者和管理者的用户标识,再进行鉴权,如果鉴权通过再创建相应的构件仓库。
具体的鉴权方式可以有很多种,在本发明的一个实施例中,上述装置中,代码仓库信息包括一个或多个用户标识;存储单元230,适于判断构件仓库创建请求中包含的用户标识是否与代码仓库信息中的用户标识匹配,若不匹配则判定为鉴权不通过。
例如构件仓库创建请求中的用户标识为developer1,返回的代码仓库信息中有leader1,developer1,developer2,developer3,示出了A项目的开发人员和组成人员。这样由于提交构件仓库创建请求的用户确实是A项目的成员,则鉴权通过。
当然在其他实施例中还可以要求必须是管理者才可以创建构件仓库。则在本发明的一个实施例中,上述装置中,代码仓库信息中还包括各用户标识对应的用户类型;存储单元230,适于若构件仓库创建请求中包含的用户标识是否与代码仓库信息中的一个用户标识匹配时,根据该匹配的用户标识的用户类型进行鉴权。例如匹配的developer1的用户类型是普通开发者而非管理者,则鉴权不通过。
在本发明的一个实施例中,上述装置中,存储单元230,适于创建与构件仓库对应的一个或多个权限控制角色;建立一个或多个用户账户,为各用户账户分别绑定一个权限控制角色。
在本实施例中主要是考虑了两方面的因素:一是对于一个构件仓库,权限的种类一般不复杂,设置权限控制角色方便对权限进行划分。另一方面项目开发人员的流动性较高,设置普通的用户账户控制可能不安全,而将用户账户绑定到权限控制角色上,实现了用户与权限的松耦合,更改起来比较方便。例如,developer1对应的开发者从A项目转去B项目,只需要更改权限控制角色的绑定关系即可。
在本发明的一个实施例中,上述装置中,存储单元230,适于根据代码仓库信息中的用户标识,建立与各用户标识对应的用户账户。也就是一个开发者或是管理者可以有一个用户账户来访问构件仓库。而除了在构件仓库的创建过程中可以建立用户账户,在后续的开发过程中也可以随时建立,例如在本发明的一个实施例中,上述装置中,存储单元230,适于接收包含用户标识和代码仓库标识的构件仓库访问请求;根据代码仓库标识获取与代码仓库标识对应的代码仓库信息,根据代码仓库信息和用户标识进行鉴权;在鉴权通过后,建立与用户标识对应的用户账户。
例如A项目新增的成员希望能够访问A项目的构件仓库,则可以先通过如前述实施例示出的鉴权方式判断其确实属于A项目后,再为其建立一个可以访问A项目的构件仓库的用户账户。
在本发明的一个实施例中,上述装置中,权限控制角色包括如下的一种或多种:开发者角色,访问者角色,管理员角色。
例如赋予开发者角色对构件仓库的读写权限,而访问者角色仅具有读权限,管理员角色具有构件仓库的全部权限。
在本发明的一个实施例中,上述装置中,存储单元230,还适于接收构件提交请求,根据构件提交请求中的用户账户信息进行鉴权;在鉴权通过后,将提交的构件保存至相应的构件仓库中。
这一实施例中的鉴权则可以是判断用户是否有上传构件的权限,例如用户对应的仅仅是一个访问者角色,则不能够上传构件,而如果是一个开发者角色则能够上传。类似地,在本发明的一个实施例中,上述装置中,存储单元230,适于根据下载请求进行鉴权,在在鉴权通过后,根据下载请求从构件仓库中查找出相应的构件并返回。这一实施例对应于构件下载过程中的鉴权,与前述实施例相类似,在此不再赘述。
综上所述,本发明的技术方案,通过获取待存储的构件,按本地存储规则确定该构件的本地存储路径,根据本地存储路径和文件名生成规则,生成构件在私有云上的文件名,将构件按生成的文件名存储至私有云中。该技术方案对现有的构件仓库的存储策略进行了改进,既能够不对已有的本地存储规则进行大的更改变动,又能够实现将构件正常存储到私有云这类大容量存储介质上,实现了构件的海量存储和统一管理。
需要说明的是:
在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的构件处理装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
例如,图3示出了根据本发明一个实施例的电子设备的结构示意图。该电子设备包括处理器310和被安排成存储计算机可执行指令(计算机可读程序代码)的存储器320。存储器320可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。存储器320具有存储用于执行上述方法中的任何方法步骤的计算机可读程序代码331的存储空间330。例如,用于存储计算机可读程序代码的存储空间330可以包括分别用于实现上面的方法中的各种步骤的各个计算机可读程序代码331。计算机可读程序代码331可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。这些计算机程序产品包括诸如硬盘,紧致盘(CD)、存储卡或者软盘之类的程序代码载体。这样的计算机程序产品通常为例如图4所述的计算机可读存储介质。图4示出了根据本发明一个实施例的一种计算机可读存储介质的结构示意图。该计算机可读存储介质400存储有用于执行根据本发明的方法步骤的计算机可读程序代码331,可以被电子设备300的处理器310读取,当计算机可读程序代码331由电子设备300运行时,导致该电子设备300执行上面所描述的方法中的各个步骤,具体来说,该计算机可读存储介质存储的计算机可读程序代码331可以执行上述任一实施例中示出的方法。计算机可读程序代码331可以以适当形式进行压缩。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明的实施例公开了A1、一种构件处理方法,包括:
获取待存储的构件;
按本地存储规则确定该构件的本地存储路径;
根据所述本地存储路径和文件名生成规则,生成所述构件在私有云上的文件名;
将所述构件按生成的文件名存储至所述私有云中。
A2、如A1所述的方法,其中,所述获取待存储的构件包括:
从代码仓库获取与待存储的构件对应的代码;
根据获取的代码打包生成待存储的构件。
A3、如A2所述的方法,其中,所述从代码仓库获取与待存储的构件对应的代码包括:
监听所述代码仓库中的代码保存事件;
当监听到的代码保存事件触发了预设的构件生成规则时,获取与监听到的代码保存事件对应的代码。
A4、如A1所述的方法,其中,所述获取待存储的构件包括:
提供前端页面,通过所述前端页面接收提交的构件,和/或通过所述前端页面接收与待存储的构件对应的地址,从所述地址获取构件。
A5、如A1所述的方法,其中,所述根据所述本地存储路径和文件名生成规则,生成所述构件在私有云上的文件名包括:
从所述本地存储路径中提取出一级或多级目录的目录名,在所述文件名中按目录级别依序写入相应的目录名。
A6、如A1所述的方法,其中,该方法还包括:
将所述构件转换为若干个不同类型的二进制文件,生成与各二进制文件对应的标识;
所述根据所述本地存储路径和文件名生成规则,生成所述构件在私有云上的文件名包括:
根据所述标识和预设的哈希算法生成相应的哈希值,在所述文件名中写入所述哈希值。
A7、如A6所述的方法,其中,所述生成与各二进制文件对应的标识包括:
根据所述构件自身的文件名生成所述标识。
A8、如A1所述的方法,其中,该方法还包括:
接收对指定构件的下载请求;
根据所述下载请求在所述私有云中查找出相应的构件并返回。
本发明的实施例还公开了B9、一种构件处理装置,包括:
获取单元,适于获取待存储的构件;
处理单元,适于按本地存储规则确定该构件的本地存储路径;根据所述本地存储路径和文件名生成规则,生成所述构件在私有云上的文件名;
存储单元,适于将所述构件按生成的文件名存储至所述私有云中。
B10、如B9所述的装置,其中,
所述获取单元,适于从代码仓库获取与待存储的构件对应的代码;根据获取的代码打包生成待存储的构件。
B11、如B10所述的装置,其中,
所述获取单元,适于监听所述代码仓库中的代码保存事件;当监听到的代码保存事件触发了预设的构件生成规则时,获取与监听到的代码保存事件对应的代码。
B12、如B9所述的装置,其中,
所述获取单元,适于提供前端页面,通过所述前端页面接收提交的构件,和/或通过所述前端页面接收与待存储的构件对应的地址,从所述地址获取构件。
B13、如B9所述的装置,其中,
所述处理单元,适于从所述本地存储路径中提取出一级或多级目录的目录名,在所述文件名中按目录级别依序写入相应的目录名。
B14、如B9所述的装置,其中,
所述处理单元,还适于将所述构件转换为若干个不同类型的二进制文件,生成与各二进制文件对应的标识;所述根据所述本地存储路径和文件名生成规则,生成所述构件在私有云上的文件名包括:根据所述标识和预设的哈希算法生成相应的哈希值,在所述文件名中写入所述哈希值。
B15、如B14所述的装置,其中,
所述处理单元,适于根据所述构件自身的文件名生成所述标识。
B16、如B9所述的装置,其中,
所述存储单元,还适于接收对指定构件的下载请求;根据所述下载请求在所述私有云中查找出相应的构件并返回。
本发明的实施例还公开了C17、一种电子设备,其中,该电子设备包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如A1-A8中任一项所述的方法。
本发明的实施例还公开了D18、一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被处理器执行时,实现如A1-A8中任一项所述的方法。

Claims (10)

1.一种构件处理方法,包括:
获取待存储的构件;
按本地存储规则确定该构件的本地存储路径;
根据所述本地存储路径和文件名生成规则,生成所述构件在私有云上的文件名;
将所述构件按生成的文件名存储至所述私有云中。
2.如权利要求1所述的方法,其中,所述获取待存储的构件包括:
从代码仓库获取与待存储的构件对应的代码;
根据获取的代码打包生成待存储的构件。
3.如权利要求2所述的方法,其中,所述从代码仓库获取与待存储的构件对应的代码包括:
监听所述代码仓库中的代码保存事件;
当监听到的代码保存事件触发了预设的构件生成规则时,获取与监听到的代码保存事件对应的代码。
4.如权利要求1所述的方法,其中,所述获取待存储的构件包括:
提供前端页面,通过所述前端页面接收提交的构件,和/或通过所述前端页面接收与待存储的构件对应的地址,从所述地址获取构件。
5.一种构件处理装置,包括:
获取单元,适于获取待存储的构件;
处理单元,适于按本地存储规则确定该构件的本地存储路径;根据所述本地存储路径和文件名生成规则,生成所述构件在私有云上的文件名;
存储单元,适于将所述构件按生成的文件名存储至所述私有云中。
6.如权利要求5所述的装置,其中,
所述获取单元,适于从代码仓库获取与待存储的构件对应的代码;根据获取的代码打包生成待存储的构件。
7.如权利要求6所述的装置,其中,
所述获取单元,适于监听所述代码仓库中的代码保存事件;当监听到的代码保存事件触发了预设的构件生成规则时,获取与监听到的代码保存事件对应的代码。
8.如权利要求5所述的装置,其中,
所述获取单元,适于提供前端页面,通过所述前端页面接收提交的构件,和/或通过所述前端页面接收与待存储的构件对应的地址,从所述地址获取构件。
9.一种电子设备,其中,该电子设备包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如权利要求1-4中任一项所述的方法。
10.一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被处理器执行时,实现如权利要求1-4中任一项所述的方法。
CN201810813447.9A 2018-07-23 2018-07-23 构件处理方法和装置 Pending CN110750502A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810813447.9A CN110750502A (zh) 2018-07-23 2018-07-23 构件处理方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810813447.9A CN110750502A (zh) 2018-07-23 2018-07-23 构件处理方法和装置

Publications (1)

Publication Number Publication Date
CN110750502A true CN110750502A (zh) 2020-02-04

Family

ID=69275157

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810813447.9A Pending CN110750502A (zh) 2018-07-23 2018-07-23 构件处理方法和装置

Country Status (1)

Country Link
CN (1) CN110750502A (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100058294A1 (en) * 2008-08-27 2010-03-04 International Business Machines Corporation Guarding code check-in with test case execution results
CN104506628A (zh) * 2014-12-25 2015-04-08 深圳市科漫达智能管理科技有限公司 一种插件仓库管理方法与系统
CN106055377A (zh) * 2016-06-03 2016-10-26 北京奇虎科技有限公司 一种实现分布式编译的方法和分布式编译系统
CN106708822A (zh) * 2015-07-20 2017-05-24 方正国际软件(北京)有限公司 一种文件存储方法和装置
CN107404520A (zh) * 2017-07-20 2017-11-28 郑州云海信息技术有限公司 一种基于云管理平台的管理方法及系统
CN107992557A (zh) * 2017-11-28 2018-05-04 平安养老保险股份有限公司 静态资源更新方法、装置、存储介质和计算机设备

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100058294A1 (en) * 2008-08-27 2010-03-04 International Business Machines Corporation Guarding code check-in with test case execution results
CN104506628A (zh) * 2014-12-25 2015-04-08 深圳市科漫达智能管理科技有限公司 一种插件仓库管理方法与系统
CN106708822A (zh) * 2015-07-20 2017-05-24 方正国际软件(北京)有限公司 一种文件存储方法和装置
CN106055377A (zh) * 2016-06-03 2016-10-26 北京奇虎科技有限公司 一种实现分布式编译的方法和分布式编译系统
CN107404520A (zh) * 2017-07-20 2017-11-28 郑州云海信息技术有限公司 一种基于云管理平台的管理方法及系统
CN107992557A (zh) * 2017-11-28 2018-05-04 平安养老保险股份有限公司 静态资源更新方法、装置、存储介质和计算机设备

Similar Documents

Publication Publication Date Title
US20210247970A1 (en) Container image building using dependency container images
US10747724B2 (en) System and method of using data blocks to optimize file storage
US9819609B2 (en) System and method for multitenant execution of OS programs invoked from a multitenant middleware application
US8073926B2 (en) Virtual machine image server
US7849462B2 (en) Image server
US8555018B1 (en) Techniques for storing data
US8606751B1 (en) System and method for backup by inode number
US9471610B1 (en) Scale-out of data that supports roll back
US10437470B1 (en) Disk space manager
US10983873B1 (en) Prioritizing electronic backup
WO2019095667A1 (zh) 数据库数据采集方法、应用服务器及计算机可读存储介质
CN106529281A (zh) 一种可执行文件处理方法及装置
CN111651122B (zh) 数据删除方法、装置、服务器及存储介质
US11163793B2 (en) Ordered list management in a replicated environment
CN110750502A (zh) 构件处理方法和装置
US20150347402A1 (en) System and method for enabling a client system to generate file system operations on a file system data set using a virtual namespace
CN112347046B (zh) 一种获取分布式系统中文件的创建时间的方法
CN110750293A (zh) 构件仓库的实现方法和装置
CN110750259B (zh) 构件的处理方法和装置
CN115964061A (zh) 插件更新方法、装置、电子设备和计算机可读存储介质
CN105843881A (zh) 一种图片处理url映射方法和装置
CN113064943A (zh) 一种数据采集方法、装置、电子设备和存储介质
US11100088B1 (en) Bulk file verification
CN108008985A (zh) 应用程序加载方法及装置
US20180068003A1 (en) Updating a local instance of a shared drive

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20200204

RJ01 Rejection of invention patent application after publication