用于托管和发布软件包的基础架构的制作方法

文档序号:13518260阅读:168来源:国知局
用于托管和发布软件包的基础架构的制作方法



背景技术:

近年来,软件工程师专注于在诸如ios、android、windowsphone、blackberry和firefoxos的各个平台上构建应用。这些应用通常使用软件开发工具包(sdk)来为用户提供对诸如地图、电子邮件、新闻和社交网络信息的数据和功能的访问。软件开发工具包(sdk)可包括软件开发工具、库、文档、头文件和示例的集合,它们可以用于开发具有sdk中指定的特定功能的某些开发平台的应用。sdk可包括应用编程接口(api),以使得软件开发者可以对来自其它应用或诸如web服务的服务的方法和数据进行受控访问。

例如,sdk提供者可以创建地图绘制服务,并为软件开发者提供地图api以访问地图绘制服务的功能。地图sdk可以包含示例代码、库、和关于应如何使用地图功能的文档。地图api可以含有包括获得以下的方法的关于地图绘制服务的信息:到位置的路线指引、位置之间的行进距离、位置之间的行进时间、以及位置的高程。如果软件开发者正在为快餐店构建应用,则该开发者可能希望使用地图api来允许用户请求从用户当前位置到餐厅的路线指引。开发者不必编写地图特定代码来获得路线指引,而可以替代地使用地图api访问地图绘制web服务的功能并获得路线指引。

通常,每个sdk开发团队都有与其它sdk开发团队完全独立的端到端发行过程。这些单独的发行过程可能会有若干问题。例如,单独的sdk可以以不同的格式提供,这导致开发者可获得不一致的封装结构和组件。然后开发者必须了解如何处置每个特定的格式。如果在sdk间进行任何兼容性测试,则另一个问题是最小的。由于各sdk开发团队都会发行自己的sdk,因此每个团队只测试自己的sdk,而不考虑可能在同一开发平台上使用的其它sdk。因为sdk可能会依赖性于相同的依赖性,但却使用不同版本的依赖性,因此缺乏sdk之间的测试可能会在产生的sdk间引起二进制的不兼容性。另一个问题是,目前还没有办法提供关于sdk的一致文档,包括如何在开发项目中使用特定的sdk。此外,在已发行的用于特定软件平台的sdk之间不存在外部消息收发协调。

如本发明人所认识到的,应该有一种自动化系统,为sdk提供端到端的发行过程,以使得sdk可以与其它sdk结合发行。



技术实现要素:

本说明书描述了与托管和发布软件包有关的技术。

通常,本说明书中描述的主题的方面可以以计算机实现的方法和系统来实施。一种示例系统包括一个或多个处理设备和存储指令的一个或多个存储设备,所述指令在由所述一个或多个处理设备执行时使得所述一个或多个处理设备实现示例方法。一种示例方法包括:接收并存储与软件开发工具包相关的工件(artifact)和描述软件开发工具包的版本的元数据;将所接收的工件和元数据转换成用于软件开发工具包的包;对所述包进行暂存,并且检查所述包的所有依赖性以确保包的依赖性存在以及与另一暂存包没有任何依赖性冲突,所述另一暂存包与所述包使用至少一个相同的依赖性;测试当前暂存的包以确定在所暂存的包之间是否存在任何不兼容性;以及使用访问控制信息以向适当的用户提供以公共格式的当前暂存的包。

用于托管和发布软件包的另一示例系统包括:sdk主机,其接收并存储与软件开发工具包相关的工件和描述所述软件开发工具包的版本的元数据;转换器,其将所接收的工件和元数据转换为用于所述软件开发工具包的包;暂存主机,其暂存所述包并检查所述包的所有依赖性,以确保所述包的依赖性存在并且与另一暂存包没有任何依赖性冲突,所述另一暂存包与所述包使用至少一个相同的依赖性;测试器,其获取当前暂存的包并测试它们以确定在所暂存的包之间是否存在任何不兼容性;以及包主机,其从所述测试器接收当前暂存的包,并使用访问控制信息以向适当的用户提供以公共格式的当前暂存的包。

这些和其它实施例可以可选地包括以下特征中的一个或多个。工件可包括:更改日志、许可证文件、资源、媒体文件、示例项目、源文件、编译的二进制文件、库、或与特定sdk相关的其它信息。工件可以以压缩格式接收。元数据可包括:sdk的名称、版本控制信息、sdk依赖性、sdk的作用描述、sdk的作者、sdk的作者的联系信息、许可信息、sdk的官方网站、sdk平台要求、截屏、集成sdk之前运行的命令、弃用信息、编译和项目设置或sdk的其它详细信息。元数据可以以json、yaml、xml或自定义域特定语言格式接收。元数据可以通过面向公众的源控制管理系统中的标签和经http派发的静态.zip文件接收。工件和元数据可能只能存储以用于受支持的sdk版本中。可以在诸如来自sdk提供者的明确信号、对所述sdk主机的状态的轮询或从sdk主机接收关于变化的信号的条件下触发转换过程。命令行工具或其它交互方式可允许sdk提供者以信号通知特定的sdk和版本存在并已准备好进行测试。

在仅以说明的方式给出的附图以及在下面的说明书中阐述了本发明的一个或多个实施例的细节。本发明的其它特征、方面、和优点将通过说明书、附图、和权利要求书变得显而易见。各附图中相似的附图标记和名称指示相似的元素。

附图说明

图1是图示用于托管和发布软件开发包的示例系统的框图。

图2是图示用于托管和发布软件开发包的示例方法的流程图。

图3是图示示例计算设备的框图。

图4是图示用于生成sdk的示例系统的框图。

图5a是图示sdk依赖性的示例的框图。

图5b是图示sdk依赖性的示例的框图。

具体实施方式

根据一个示例实施例,可以有一种用于托管和发布软件开发包的系统,其解决sdk间的冲突,并且在单个主机站点上以通用的输出格式提供sdk以供开发者使用。

示例自动化系统可以允许开发者在单个地点并以通用格式获得用于特定软件平台的sdk。示例系统可以测试sdk与其它将部署在平台上的sdk的兼容性,并以通用格式提供sdk,该格式包括一致的封装结构并为开发者在其应用中提供一致的组件。

示例系统可以从托管所有可用的sdk的单个站点提供若干sdk。如图1所示的示例系统可以从sdk提供者收取包括与特定sdk相关的工件(101)和元数据(102)的信息,并将所提供的信息转换为用户可消费的格式。在一些实施例中,示例工件可以包括与特定sdk相关的信息——诸如更改日志、许可证文件、资源、媒体文件、示例项目、源文件、以及编译的二进制文件和库,该工件可以是压缩格式如.zip文件。示例元数据可以包括sdk的名称、版本控制信息(versioninginformation)、sdk依赖性、sdk的作用描述、sdk的作者、sdk作者的联系信息、许可信息、sdk的官方网站、sdk平台要求(诸如操作系统版本和cpu架构)、截屏、在集成sdk之前运行的命令、弃用信息(deprecationinformation)、编译和项目设置、以及sdk的其它详细信息。该信息可以由sdk提供者以多种不同格式提供给示例系统,所述格式包括:json、yaml、xml或自定义域特定语言(dsl)。可以有各种方法用于将这些文件发送到示例系统,该示例系统包括在面向公众的源代码管理系统中的标签和通过http派发的静态.zip文件。

示例系统可以接收描述sdk的版本的工件(101)和元数据(102),并将该信息存储在通用数据存储——sdk主机(103)中。该sdk主机(103)可以保持每个接收和支持的sdk的每个版本。版本可无限期地保留。在一个实施例中,示例系统可以具有包的“支持版本”的概念。支持版本是sdk开发者主动支持的sdk版本。sdk可更新其元数据,以指示它们已被弃用而无需替换或为利于被命名的另一sdk而已被弃用。一旦开发者不再支持某版本,示例系统可删除不被支持的sdk的包。然后,系统可以将信息发送到转换器(104),在该处将接收到的信息转换成具有用于开发过程的必要工具的包。示例转换器(104)可使用接收到的工件(101)和元数据(102)来理解如何封装特定sdk的版本。例如,工件之一可以是一个构建文件,其描述了sdk的所有必要组件以及应当将特定文件添加到包中的顺序。

在一个示例中,可以在如图4所示的脚本中描述所有必要的文件和配置。该组件脚本(402)可以取得所有作为sdk发行的一部分的文件并将它们放在标准文件夹层次结构中。该脚本可使用标准配置文件——诸如json文件——来列出所有必需的文件并构建配置。可能需要以下密钥来构建sdk的版本:名称、公共名称、版本、概述、描述、和主页。名称可以是将作为层次结构的根名称的组件的名称。公共名称可以是示例系统将用来向用户显示sdk的公共名称。版本可以是正在构建的sdk的版本。概述可以是正在构建的sdk的简短描述。描述可以是sdk的更长的描述。主页可以是具有项目信息和文档的sdk的网站url。

附加脚本(404)可以为新组件(403)生成新的构建配置并且更新新的sdk版本的标签。该脚本(404)可以使用存储在构建文件中的配置/在新组件文件(403)中的配置来生成适当的元数据和构建规则。另一个脚本(406)可以取得版本目录并将其编译成存档文件,例如用于传播的cocoapodzip文件(407)。示例转换器(104)可以在各种条件下被触发,所述条件包括:来自sdk提供者的明确信号、对sdk主机(103)的状态的轮询、或接收关于来自sdk主机(103)的改变的信号。sdk主机中的数据可以是结构化格式,其允许快速检查sdk和版本组合。在一个示例系统中,此格式可以是在sdk/版本(sdk/version)格式的源控制中的目录结构。在轮询时,可以生成sdk和版本对的列表。该列表可以与已经被转换的对集进行比较以确定应转换的sdk/版本。在其它实施例中,示例系统可以按照一定的时间表转换sdk主机中的所有内容。

一旦已经完成了sdk的特定版本的转换,则可以将包推送到暂存主机(staginghost)(105)。可以检查这个阶段的依赖性。示例系统检查以确保所有依赖性都存在,并且依赖性的正确版本可用。如果依赖性不存在或正确版本不可用,则该包将保留在暂存主机(105)中直到依赖性可用并被更正为止。也可以在此阶段解决sdk间的冲突。多个sdk潜在地可被暂存,但依赖性可以首先被暂存。冲突解决可以是在这个阶段的手动处理,因为它是最有可能的原因是可能无法以编程方式进行修正的语义问题。一个示例系统可以通过关于该问题的尽可能多的信息来通知冲突sdk的所有者。

测试器(106)可以用于将来自暂存主机(105)的包传播到包主机(107)。在一个示例系统中,测试器(106)可以获取当前的暂存包并测试它们。该测试器(106)可以由转换器(104)、暂存主机(105)、sdk提供者、或经由轮询机制来触发。在一些实施例中,当完成转换时,由转换器(104)或暂存主机(105)将暂存主机中的新包的位置发送给测试器。在其它实施例中,可以存在命令行工具或其它交互方式,其允许sdk提供者向测试器(106)发信号通知暂存主机中存在特定的sdk和版本并需要测试。测试可涉及利用暂存包和相关的可用包构建应用,以确保没有构建问题。该服务还可以支持运行更复杂的集成测试,即确保依赖于不同sdk的应用功能起作用。一个示例系统可以提供组件化的测试集合。可以有预提交检查、集成测试、对派发源存档和文件[]的托管基础架构实例的预封装部署、以及对于构建规则的核实。当创建或更新sdk版本时,可核实配置脚本以确保其可包含具有以下属性的有效参数:正确的公共名称、正确声明的依赖性;比描述更短的摘要;指定的最低平台版本;和有效的主页。此外,可针对特定架构核实库。可以检查针对sdk对环境规范的更改以验证更新的环境规范是可部署和经核实的。例如,核实可以包括预提交检查,以保证存在经版本控制、存储、和从示例系统访问的所有指定的文件包,验证指定的文件包的集合含有有效/一致的集合,以及可以对本地机器执行测试部署以确定sdk将部署。在sdk已经成功部署之后,可以设置持续的集成测试,并运行示例项目和互操作性测试以确定正在部署到同一开发平台的sdk间的兼容性。一旦包已被测试,它可能被推送到包主机(107)。可以提供访问控制信息,其控制包应当可访问的方式。可以为包主机(107)提供该访问控制信息,使得包主机(107)可以向适当的用户提供包。访问控制信息可以作为元数据的一部分被提供,或者可以由sdk提供者以信号发出。在一个实施例中,托管基础架构内的不同位置可以确定包的访问控制列表(acl)。可向sdk提供者提供工具以将包推送到特定acl的正确位置。例如,可以实现访问控制规则,其使用ip地址来确定用户或应用是否可以访问特定的sdk。可以有私有、半私有和外部可访问的包。如图1所图示,内部托管的包(108)可以是私有的,早期访问程序托管的包(109)可以是半私有的,并且公共托管的包(110)可以由公众用户在外部访问。可以推送到附加用户/应用的包可以缓存在暂存主机中,以使得稍后不需要将其重新转换为包。

如上所述,可以以公共格式——诸如cocoapods,例如如图4所图示的支持的zip文件(407)——来提供包。cocoapods是最近在ios开发社区中已变得流行的库分发和依赖性解析机制。这些机制允许用于获取库及其依赖性的简化自动化工作流程。它们还施行库的语义版本控制。使用cocoapods的开发者列出了他们想直接使用的库和podfile中的相关版本控制信息。cocoapod工具可以使用该文件来获取库及其依赖性。

在一些实施例中,可以没有暂存主机。可以在sdk主机中完成依赖性解析。此外,sdk可作为发行来批处理。如果sdk被批处理,则可以不需要在转换器或测试器中执行依赖性检查。提供者可只负责推送具有正确依赖性的新sdk。使用批处理,一个示例系统可避免让包在暂存主机中等待它们的依赖性。作为替代,包中必须已经嵌入其依赖性,或者利用它们的依赖性进行批处理。该要求可以简化示例系统中的一些逻辑。

用于托管和发布软件包的示例方法开始于接收工件和描述sdk版本的元数据(201)。然后,可以将接收到的工件和元数据转换成包(203)。可以检查包的依赖性以了解是否所有依赖性都可用或者是否存在与其它sdk的冲突。(205)。然后,可以测试该包以确保在sdk间没有冲突——即构建冲突。(207)。然后,可以经由公共格式将包提供给适当的用户(208)。可以通过检查与sdk相关联的访问控制规则来确定适当的用户。

示例系统可以具有许多有用的用途。例如,如图5a所示,可以有允许用户记录他们与人的交互——例如音乐会的应用。该应用可以称为concerttracker(音乐会跟踪器)(501a),并且需要访问地图sdk(502a)和社交sdk(503a)以供得到位置信息和关于用户朋友的信息。concerttracker(501a)也可以让用户使用社交sdk(503a)与该用户的朋友共享信息。这些sdk(502a,503a)可以都依赖于允许报告分析信息的第三sdk(504a1,504a2)。如果地图sdk(502a)目前使用6.x(504a1)版本的分析sdk,而社交sdk(503a)使用7.x(504a2)版本的分析sdk,则可能不会有提供两者所需的api的公共版本的sdk。此外,两个sdk(502a,503a)可能使用相同的开源库(505a1,505a2)来诸如在应用崩溃时记录开发者的信息。如果将库编译到每个sdk中而不重命名符号,则根据地图sdk(502a)和社交sdk(503a)构建应用将由于重复的符号而失败。为了解决这个问题,如图5b所示,示例系统可以创建包含库(505b)的包并且使地图sdk(502b)和社交sdk(503b)两者都依赖性于所创建的包以使得依赖性管理器仅拉取开源库(505b)的一个副本。

图3是被布置用于托管和发布软件包的示例计算机(300)的高级框图。在非常基础配置(301)中,计算设备(300)通常包括一个或多个处理器(310)以及系统存储器(320)。存储器总线(330)可用于在处理器(310)和系统存储器(320)之间的通信。

根据期望的配置,处理器(310)可以是任何类型包括但不限于微处理器(μp)、微控制器(μc)、数字信号处理器(dsp)或其任何组合。处理器(310)可以包括一个多级高速缓存——例如一级高速缓存(311)和二级高速缓存(312)、处理器核心(313)和寄存器(314)。处理器核心(313)可以包括算术逻辑单元(alu)、浮点单元(fpu)、数字信号处理核心(dspcore)或其任何组合。存储器控制器(315)也可以与处理器(310)一起使用,或者在一些实现中,存储器控制器(315)可以是处理器(310)的内部部分。

根据期望的配置,系统存储器(320)可以是任何类型的,包括但不限于:易失性存储器(诸如ram)、非易失性存储器(诸如rom、闪速存储器等)、或任何其组合。系统存储器(320)通常包括操作系统(321)、一个或多个应用(322)、以及程序数据(324)。应用(322)可以包括用于托管和发布软件包的方法。程序数据(324)包括存储当由一个或多个处理设备执行时实现用于托管和发布软件包的方法的指令。(323)。在一些实施例中,应用(322)可以被布置为与操作系统(321)上的程序数据(324)一起操作。

计算设备(300)可以具有附加特征或功能、以及用于促进基础配置(301)与任何所需设备和接口之间的通信的附加接口。

系统存储器(320)是计算机存储介质的示例。计算机存储介质包括但不限于ram、rom、eeprom、闪速存储器或其它存储器技术、cd-rom、数字通用盘(dvd)或其它光学存储、磁带盒、磁带、磁盘存储或其它磁存储设备,或可以用于存储所期望信息并且可由计算设备300访问的任何其它介质。任何这样的计算机存储介质可以是设备(300)的一部分。

计算设备(300)可以实现为小型便携式(或移动)电子设备的一部分,例如蜂窝电话、智能电话、个人数据助理(pda)、个人媒体播放器设备、平板电脑(平板)、无线web手表设备、个人头戴式送受话器设备、专用设备、或包含上述任何功能的混合设备。计算设备(300)也可以实现为包括膝上型计算机和非膝上型计算机配置二者的个人计算机。

前面的详细描述已经经由使用框图、流程图、和/或示例来阐述了设备和/或过程的各个实施例。就这样的框图、流程图、和/或示例包含一个或多个功能和/或操作而言,本领域技术人员将会理解,这样的框图、流程图、或示例中的每个功能和/或操作可以通过广泛多种的硬件、软件、固件或其实际上的任何组合单独地和/或共同地实现。在一个实施例中,本文描述的主题的若干部分可以通过专用集成电路(asic)、现场可编程门阵列(fpga)、数字信号处理器(dsp)、其它集成格式、或作为web服务来实现。然而,本领域技术人员将认识到,本文公开的实施例的某些方面能够整体或部分地等效地在集成电路中实现,以作为在一个或多个计算机上运行的一个或多个计算机程序、作为在一个或多个处理器上运行的一个或多个程序、作为固件、或作为实际上其任何组合,并且根据此公开设计电路和/或编写软件和/或固件代码将完全处于本领域技术人员的技能范围内。此外,本领域技术人员将理解,本文描述的主题的机制能够作为多种形式的程序产品分发,并且本文描述的主题的说明性实施例无论用于实际执行该分发的非瞬时性信号承载介质的具体类型如何都适用。非瞬时性信号承载介质的示例包括但不限于以下:可记录型介质,诸如软盘、硬盘驱动器、压缩盘(cd)、数字视频盘(dvd)、数字磁带、计算机存储器等;以及传输类型介质,诸如数字和/或模拟通信介质。(例如,光纤电缆、波导、有线通信链路、无线通信链路等)。

关于在本文中使用的基本任何复数和/或单数术语,只要适用于场境(context)和/或应用,则本领域技术人员就可以从复数形式转化为单数形式和/或从单数形式转化为复数形式。为清楚起见,本文可以明确地阐述各种单数/复数排列组合。

因此,已经描述了主题的特定实施例。其它实施例在所附权利要求书的范围内。在一些情况下,权利要求中记载的动作可以以不同的顺序执行并且仍然实现期望的结果。此外,附图中所描绘的过程不一定需要所示的特定顺序或连续顺序来获得期望的结果。在某些实施方式中,多任务和并行处理可能是有利的。

权利要求书(按照条约第19条的修改)

1.一种用于托管和发布软件包的系统,所述系统包括:

sdk主机(103),所述sdk主机(103)接收并存储与软件开发工具包相关的工件和描述所述软件开发工具包的版本的元数据;

转换器(104),所述转换器(104)将所接收的工件和元数据转换为用于所述软件开发工具包的包;

暂存主机(105),所述暂存主机(105)暂存所述包并检查所述包的所有依赖性,以确保所述包的依赖性存在并且与另一暂存包没有任何依赖性冲突,所述另一暂存包与所述包使用至少一个相同的依赖性;

测试器(106),所述测试器(106)获取当前暂存的包并测试它们以确定在所暂存的包之间是否存在任何不兼容性;以及

包主机(107),所述包主机(107)从所述测试器接收当前暂存的包,并使用访问控制信息来确定托管基础架构内的哪个ip地址提供以公共格式的当前暂存的包,其中所述托管基础架构内的不同的ip地址确定包的访问控制列表(acl)。

2.根据权利要求1所述的系统,其中,工件包括:更改日志、许可证文件、资源、媒体文件、示例项目、源文件、编译的二进制文件、库或与特定sdk相关的其它信息。

3.根据权利要求1所述的系统,还包括接收以压缩格式的工件。

4.根据权利要求1所述的系统,其中,元数据包括:sdk的名称、版本控制信息、sdk依赖性、sdk的作用描述、sdk的作者、sdk的作者的联系信息、许可信息、sdk的官方网站、sdk平台要求、截屏、集成sdk之前运行的命令、弃用信息、编译和项目设置或sdk的其它详细信息。

5.根据权利要求1所述的系统,还包括:以json、yaml、xml、自定义域特定语言格式或通过面向公众的源控制管理系统中的标签和经http派发的静态.zip文件来接收元数据。

6.根据权利要求1所述的系统,还包括:所述sdk主机仅存储用于sdk的支持版本的工件和元数据。

7.根据权利要求1所述的系统,还包括:所述转换器是在一条件下触发的。

8.根据权利要求7所述的系统,其中,条件是来自sdk提供者的明确信号、对所述sdk主机的状态的轮询或者接收关于来自所述sdk主机的变化的信号。

9.根据权利要求1所述的系统,还包括命令行工具或其它交互方式,所述其它交互方式允许sdk提供者向所述测试器以信号通知所述暂存主机中存在特定的sdk和版本并且所述特定的sdk和版本已准备好进行测试。

10.一种用于托管和发布软件包的计算机实现的方法,所述方法包括:

接收并存储与软件开发工具包相关的工件和描述所述软件开发工具包的版本的元数据(201);

将所接收的工件和元数据转换成用于所述软件开发工具包的包(203);

对所述包进行暂存,并且检查所述包的所有依赖性,以确保所述包的依赖性存在以及与另一暂存包没有任何依赖性冲突,所述另一暂存包与所述包使用至少一个相同的依赖性(205);

测试当前暂存的包以确定在所暂存的包之间是否存在任何不兼容性(207);以及

使用访问控制信息来确定托管基础框架内的哪个ip地址提供以公共格式的当前暂存的包,其中所述托管基础架构内的不同的ip地址确定包的访问控制列表(acl)。

11.根据权利要求10所述的方法,其中,工件包括:更改日志、许可证文件、资源、媒体文件、示例项目、源文件、编译的二进制文件、库或与特定sdk相关的其它信息。

12.根据权利要求10所述的方法,其中,元数据包括:sdk的名称、版本控制信息、sdk依赖性、sdk的作用描述、sdk的作者、sdk的作者的联系信息、许可信息、sdk的官方网站、sdk平台要求、截屏、集成sdk之前运行的命令、弃用信息、编译和项目设置或sdk的其它详细信息。

13.根据权利要求10所述的方法,还包括:以json、yaml、xml、自定义域特定语言格式或通过面向公众的源控制管理系统中的标签和经http派发的静态.zip文件来接收元数据。

14.根据权利要求10所述的方法,还包括:在一条件下触发所述转换过程。

15.根据权利要求14所述的方法,其中,条件是来自所述sdk提供者的明确信号。

16.根据权利要求10所述的方法,还包括命令行工具或其它交互方式,所述其它交互方式允许sdk提供者以信号通知特定的sdk和版本已准备好进行测试。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1