CN110750293A - 构件仓库的实现方法和装置 - Google Patents

构件仓库的实现方法和装置 Download PDF

Info

Publication number
CN110750293A
CN110750293A CN201810812767.2A CN201810812767A CN110750293A CN 110750293 A CN110750293 A CN 110750293A CN 201810812767 A CN201810812767 A CN 201810812767A CN 110750293 A CN110750293 A CN 110750293A
Authority
CN
China
Prior art keywords
warehouse
code
component
user
identification
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
CN201810812767.2A
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 CN201810812767.2A priority Critical patent/CN110750293A/zh
Publication of CN110750293A publication Critical patent/CN110750293A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2141Access rights, e.g. capability lists, access control lists, access tables, access matrices

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Bioethics (AREA)
  • Computer Security & Cryptography (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Databases & Information Systems (AREA)
  • Quality & Reliability (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了构件仓库的实现方法和装置。所述方法包括:接收提交的构件仓库创建请求;根据所述构件仓库创建请求中包含的代码仓库标识,获取与所述代码仓库标识对应的代码仓库信息,根据所述代码仓库信息和所述构件仓库创建请求中包含的用户标识进行鉴权;在鉴权通过后,创建与所述构件仓库创建请求对应的构件仓库。该技术方案打通了代码仓库和构件仓库,实现了基于已有的代码仓库的权限控制建立构件仓库,也便于实现持续集成(CI)和持续交付(CD)的闭环,大大提高了开发效率。

Description

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

Claims (10)

1.一种构件仓库的实现方法,包括:
接收提交的构件仓库创建请求;
根据所述构件仓库创建请求中包含的代码仓库标识,获取与所述代码仓库标识对应的代码仓库信息,根据所述代码仓库信息和所述构件仓库创建请求中包含的用户标识进行鉴权;
在鉴权通过后,创建与所述构件仓库创建请求对应的构件仓库。
2.如权利要求1所述的方法,其中,所述获取与所述代码仓库标识对应的代码仓库信息包括:
通过访问代码主仓库的接口,获取与所述代码仓库标识对应的代码仓库信息;
和/或,
通过邮件方式获取与所述代码仓库标识对应的代码仓库信息。
3.如权利要求1所述的方法,其中,所述代码仓库信息包括一个或多个用户标识,所述根据所述代码仓库信息和所述构件仓库创建请求中包含的用户标识进行鉴权包括:
判断所述构件仓库创建请求中包含的用户标识是否与所述代码仓库信息中的用户标识匹配,若不匹配则判定为鉴权不通过。
4.如权利要求3所述的方法,其中,所述代码仓库信息中还包括各用户标识对应的用户类型;
所述根据所述代码仓库信息和所述构件仓库创建请求中包含的用户标识进行鉴权还包括:
若所述构件仓库创建请求中包含的用户标识是否与所述代码仓库信息中的一个用户标识匹配时,根据该匹配的用户标识的用户类型进行鉴权。
5.一种构件仓库的实现装置,包括:
交互单元,适于接收提交的构件仓库创建请求;
鉴权单元,适于根据所述构件仓库创建请求中包含的代码仓库标识,获取与所述代码仓库标识对应的代码仓库信息,根据所述代码仓库信息和所述构件仓库创建请求中包含的用户标识进行鉴权;
构件仓库单元,适于在鉴权通过后,创建与所述构件仓库创建请求对应的构件仓库。
6.如权利要求5所述的装置,其中,
所述鉴权单元,适于通过访问代码主仓库的接口,获取与所述代码仓库标识对应的代码仓库信息;和/或,通过邮件方式获取与所述代码仓库标识对应的代码仓库信息。
7.如权利要求5所述的装置,其中,所述代码仓库信息包括一个或多个用户标识;
所述鉴权单元,适于判断所述构件仓库创建请求中包含的用户标识是否与所述代码仓库信息中的用户标识匹配,若不匹配则判定为鉴权不通过。
8.如权利要求7所述的装置,其中,所述代码仓库信息中还包括各用户标识对应的用户类型;
所述鉴权单元,适于若所述构件仓库创建请求中包含的用户标识是否与所述代码仓库信息中的一个用户标识匹配时,根据该匹配的用户标识的用户类型进行鉴权。
9.一种电子设备,其中,该电子设备包括:处理器;以及被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如权利要求1-4中任一项所述的方法。
10.一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被处理器执行时,实现如权利要求1-4中任一项所述的方法。
CN201810812767.2A 2018-07-23 2018-07-23 构件仓库的实现方法和装置 Pending CN110750293A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810812767.2A CN110750293A (zh) 2018-07-23 2018-07-23 构件仓库的实现方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810812767.2A CN110750293A (zh) 2018-07-23 2018-07-23 构件仓库的实现方法和装置

Publications (1)

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

Family

ID=69275039

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810812767.2A Pending CN110750293A (zh) 2018-07-23 2018-07-23 构件仓库的实现方法和装置

Country Status (1)

Country Link
CN (1) CN110750293A (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110023010A1 (en) * 2008-03-19 2011-01-27 Kim Kook Cheol Reserved component container-based software development method and apparatus
CN102722396A (zh) * 2012-06-11 2012-10-10 山东中创软件商用中间件股份有限公司 一种组件加载方法及系统
CN104506628A (zh) * 2014-12-25 2015-04-08 深圳市科漫达智能管理科技有限公司 一种插件仓库管理方法与系统
CN105653901A (zh) * 2015-12-29 2016-06-08 深圳市科漫达智能管理科技有限公司 一种组件仓库管理的方法及系统
CN107193545A (zh) * 2017-04-07 2017-09-22 广东省科技基础条件平台中心 一种面向构件的多语言协同开发装置、方法与系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110023010A1 (en) * 2008-03-19 2011-01-27 Kim Kook Cheol Reserved component container-based software development method and apparatus
CN102722396A (zh) * 2012-06-11 2012-10-10 山东中创软件商用中间件股份有限公司 一种组件加载方法及系统
CN104506628A (zh) * 2014-12-25 2015-04-08 深圳市科漫达智能管理科技有限公司 一种插件仓库管理方法与系统
CN105653901A (zh) * 2015-12-29 2016-06-08 深圳市科漫达智能管理科技有限公司 一种组件仓库管理的方法及系统
CN107193545A (zh) * 2017-04-07 2017-09-22 广东省科技基础条件平台中心 一种面向构件的多语言协同开发装置、方法与系统

Similar Documents

Publication Publication Date Title
US10747724B2 (en) System and method of using data blocks to optimize file storage
US8073926B2 (en) Virtual machine image server
CN104220987B (zh) 应用安装的方法和系统
US8606751B1 (en) System and method for backup by inode number
WO2017069864A1 (en) System and method for multitenant execution of os programs invoked from a multitenant middleware application
US11175909B2 (en) Software discovery using exclusion
US10089371B2 (en) Extensible extract, transform and load (ETL) framework
WO2019095667A1 (zh) 数据库数据采集方法、应用服务器及计算机可读存储介质
US8539048B2 (en) Electronic device and method for loading configuration files using the same
CN106529281A (zh) 一种可执行文件处理方法及装置
US9176974B1 (en) Low priority, multi-pass, server file discovery and management
CN109582487B (zh) 用于发送信息的方法和装置
CN115098297B (zh) 一种云原生存储数据卷的一致性快照生成方法和系统
CN105843881A (zh) 一种图片处理url映射方法和装置
EP3365779A1 (en) System and method for multitenant execution of os programs invoked from a multitenant middleware application
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
CN110750293A (zh) 构件仓库的实现方法和装置
CN115756549A (zh) 一种大数据中台数据的下载方法、装置及存储介质
CN110750502A (zh) 构件处理方法和装置
CN110750259B (zh) 构件的处理方法和装置
CN109525649B (zh) 一种zookeeper客户端的数据处理方法及装置
US9760585B2 (en) Objectclass versioning
CN112347046A (zh) 一种获取分布式系统中文件的创建时间的方法
US20200210375A1 (en) Tree-conversion delta encoding
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
RJ01 Rejection of invention patent application after publication

Application publication date: 20200204