基于云的构建服务的制作方法

文档序号:6496337阅读:128来源:国知局
基于云的构建服务的制作方法
【专利摘要】构建软件产品,特别是大规模软件产品的二进制代码包,是高度计算密集型过程。因此,希望将工作负载分发到大量计算节点,以便在最优的时间段内完成构建过程。提供可被用于高度可用并可动态缩放的分布式构建过程的计算资源的一个环境是弹性计算云。在这样的环境中,按构建过程的资源需求规定,虚拟机可被实例化和被破坏。这具有的优点是,专门的硬件是不需要的,并且该硬件上的用到的额外容量在构建过程空闲时可被用于其它计算任务。在此呈现的是用于分发用于弹性计算环境或其它分布式环境中的高度可用且可缩放构建服务的系统、方法和计算机存储介质。
【专利说明】基于云的构建服务
[0001]介绍
[0002]构建软件产品特别是大规模软件产品的二进制代码包,是一个高度计算密集型过程;因此,希望将工作负载分发到大量计算节点,以便在合理的时间段内完成构建过程。然而,对这样的构建服务的需求可能是高度间歇性的,因此不希望专用的构建资源在低需求时段期间处于空闲。因此,在此提供用于利用云资源以便以高度可用的、可动态缩放的且高效的方式分发构建服务的方法和系统。

【发明内容】

[0003]本发明的各实施例涉及用于分发高度可用的、可动态缩放的且高效的构建服务的系统、方法和计算机存储介质。提供可被用于可缩放地分发的构建过程的计算资源的一个环境是弹性计算云。在这样的环境中,按构建过程的资源需求规定,虚拟机可被实例化和被破坏。此方法的一个优点是,专门的硬件是不需要的,并且该硬件上的额外容量在构建过程空闲时可被用于其它计算任务。然而,对于特定组件而言保持不被虚拟化可能是有利的。在特定应用中,例如,签名密钥紧紧地控制在专用服务器上而不被准许存储在共享硬件上。因此,在此揭示的体系结构提供了高效、可缩放、高度可用且安全的系统。
[0004]提供本
【发明内容】
是为了以简化的形式介绍将在以下详细描述中进一步描述的选择的概念。本
【发明内容】
不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。
【专利附图】

【附图说明】
[0005]下面将参考附图详细描述本发明的说明性实施例,在附图中:
[0006]图1描绘了适于实现本发明各实施例的示例性计算设备;
[0007]图2描绘了根据本发明的一个方面的流程图图示;
[0008]图3描绘了适于实现本发明的各实施例的环境;
[0009]图4描绘了适于由虚拟机执行的,根据本发明的另一方面的用于处理源文件以产生二进制代码包的方法的流程图图示;
[0010]图5描绘了适于由源储存库执行的,根据本发明的另一方面的用于按需求提供源文件的方法的流程图图示;
[0011]图6描绘了适于由签名服务器执行的,根据本发明的另一方面的用于生成二进制代码文件的数字签名的方法的流程图图示;
[0012]图7描绘了适于由构建服务控制器执行的,根据本发明的另一方面的控制构建服务的方法的流程图图示;以及
[0013]图8描绘了根据本发明的又一方面的用于操作虚拟机服务器以从源文件中产生二进制代码包的流程图图示。
【具体实施方式】[0014]本发明的主题用细节来描述,以满足法定的要求。然而,该描述本身并非旨在限定各权利要求的范围。相反,发明人已设想所要求保护的主题还可结合其它当前或未来技术以其它方式来实施,以包括不同的步骤或类似于本文中所描述的步骤的步骤组合。此外,虽然术语“步骤”在这里可用于意味着所采用的方法的不同元素,然而该术语不应被解释为在这里揭示的各步骤之间隐含特定的次序,除非明确地描述了各个步骤的次序。此外,以下参考附图详细描述了本发明,各附图整体通过引用结合于此。
[0015]本发明的各实施例涉及高度可用的、可缩放、分布式服务的方法和体系结构。因此,在一个方面,本发明包括一种或多种其上包含计算机可执行指令的计算机存储介质,该指令在被执行时使得计算设备执行一种分发高度可用的、可缩放的构建服务的方法,该方法包括确定要构建的分支,标识用于构建该分支的至少一部分的虚拟机,并标识要为该分支而传输的多个源文件,其中该虚拟机处理多个源文件的至少一个源文件以生成对应二进制代码文件。该方法进一步包括,将多个源文件的该源文件传输到虚拟机,在该虚拟机上部署构建环境,并使得该虚拟机处理多个源文件的至少该源文件以生成二进制代码文件。该方法还包括,生成二进制代码文件的数字签名,将该数字签名传输到第二虚拟机,并使得至少该第二虚拟机从至少该二进制代码文件和该数字签名中生成二进制代码包。
[0016]在另一方面,本发明包括一个高度可用、可缩放、分布式构建服务系统,该系统包括多个虚拟机,每个虚拟机接收一个源文件,处理至少该源文件以生成二进制代码文件,接收对应于该二进制代码文件的数字签名,并从至少该二进制代码文件和该数字签名中生成二进制代码包。该构建系统还包括存储该源文件并将该源文件发送到构建服务控制器的第一源储存库。构建系统还包括签名服务器,它接收二进制代码文件的足以生成二进制代码文件的数字签名的表示,并生成对应于该二进制代码文件的表示的数字签名。该构建系统还包括构建服务控制器,其功能性地连接到多个虚拟机、第一源储存库和签名服务器,以及确定要构建的分支、标识要被传输的分支的多个源文件、从至少第一源储存库中检索所述多个源文件、将多个源文件的第一源文件发送到多个虚拟机的第一虚拟机、接收足以生成二进制代码文件的数字签名的二进制代码文件的表示并将该表示转发到签名服务器,并接收数字签名并将数字签名转发到多个虚拟机的第二虚拟机。
[0017]在又一个方面,本发明包括一种适于用于分布式计算环境中的计算机实现方法,该分布式计算环境利用处理器和存储器来实现高度可用的、可缩放的分布式构建服务,该方法包括,在单个物理机器处接收对应于要被生成的多个二进制代码文件的多个源文件,并在单个物理机器上实例化多个虚拟机,多个虚拟机的每个虚拟机用构建环境来配置。多个虚拟机是与要在单个物理机器上生成的二进制代码文件数量相等数量的虚拟机。该方法还包括向多个虚拟机的每个虚拟机发送对应于多个二进制代码文件的各单个二进制代码文件的那些源文件,使得多个虚拟机的每个虚拟机从这些源文件中生成各二进制代码文件,使得为多个所生成的二进制代码文件的至少一个二进制代码文件生成数字签名,并使得二进制代码包被生成。二进制代码包包括二进制代码文件和对应的数字签名。
[0018]在简要描述了本发明的各实施例的概览后,以下描述适于实现本发明的各实施例的示例性操作环境。
[0019]大体上参考附图,并且首先具体参考图1,示出了适用于实现本发明的各实施例的示例性操作环境,并将其概括指定为计算设备100。计算设备100只是合适的计算环境的一个示例,并且不旨在对本发明的使用范围或功能提出任何限制。也不应将包括设备100的计算环境解释为对所示出的任一模块/组件或其组合有任何依赖性或要求。
[0020]各实施例可以在计算机代码或机器可使用指令的一般上下文中描述,包括由计算机或诸如个人数据助理或其他手持式设备等其他机器执行的诸如程序模块等的计算机可执行指令。一般而言,包括例程、程序、对象、模块、数据结构等的程序模块指的是执行特定任务或实现特定抽象数据类型的代码。各实施例可以在各种系统配置中实施,这些系统配置包括手持式设备、消费电子产品、通用计算机、专用计算设备等等。各实施例也可以在其中任务由通过通信网络链接的远程处理设备执行的分布式计算环境中实施。
[0021]继续参考图1,计算设备100包括直接或间接耦合以下设备的总线110:存储器112、一个或多个处理器114、一个或多个呈现模块116、输入/输出(I/O)端口 118、I/O模块120、和说明性电源122。总线110表示可以是一条或多条总线(诸如地址总线、数据总线、或其组合)。尽管为了清楚起见图1的各框用线条示出,但是在实际上,各模块的描绘并不是那样清楚,并且比喻性地来说,线条更精确地将是灰色的和模糊的。例如,可以将诸如显示设备等的呈现模块认为是I/O模块。而且,处理器也具有存储器。本发明人认识到,这是本领域的特性,并且重申,图1的图示只是例示可结合一个或多个实施例来使用的示例性计算设备。诸如“工作站”、“服务器”、“膝上型计算机”、“手持式设备”等分类之间没有区另IJ,因为它们全部都被认为是在图1的范围之内的并且被称为“计算机”或“计算设备”。
[0022]计算设备100通常包括各种计算机可读介质。作为示例,而非限制,计算机可读介质可以包括以下示例性非瞬态介质:随机存取存储器(RAM);只读存储器(ROM);电可擦可编程只读存储器(EEPROM);闪存或其他存储技术;CDR0M、数字多功能盘(DVD)或其他光学或全息介质;磁带盒、磁带、磁盘存储或其他磁存储设备或可以用来编码所需要的信息并可以被计算设备100访问的任何其他介质。
[0023]存储器112包括易失性和/或非易失性存储器形式的计算机存储介质。存储器可以是可移动的,不可移动的,或两者的组合。示例性硬件设备包括固态存储器、硬盘驱动器、光盘驱动器等。计算设备100包括从诸如存储器112或I/O模块120等各种实体读取数据的一个或多个处理器。呈现模块116向用户或其他设备呈现数据指示。示例性呈现模块包括显示设备、扬声器、打印模块、振动模块等等。I/O端口 118允许计算设备100在逻辑上耦合至包括I/O模块120的其他设备,其中某些设备可以是内置的。说明性模块包括话筒、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪、打印机、无线设备等等。
[0024]现在转到图2,呈现了根据本发明的一个方面的流程图,并且该流程图被概括地指代为附图标记200。在某些实施例中,该方法适合由构建系统控制器来执行。最初,在步骤202,确定要构建的一个或多个分支的列表。如本领域所理解的,“分支”是构建设置和源代码文件(或源代码文件的各部分)的预先定义的配置,以从公共代码储存库中创建特定版本的软件产品。例如,代码库可具有“开发”和“发布”分支。作为另一个示例,代码库对不同的操作系统或硬件平台可具有不同分支。在又一个示例中,代码库可具有针对不同特征集的分支,诸如“基本”、“家庭”、“专业”和“企业”版。通常,不同分支将共享源代码的大部分,而仅在特定方面不同。在一个实施例中,基于用户输入作出构建哪些分支的决定。在另一个实施例中,咨询配置文件以确定构建哪些分支。在又一个实施例中,当前构建环境被用于确定构建哪些分支。[0025]接着,在步骤203,用于构建的虚拟机被标识。在一个实施例中,构建服务最初具有实例化在一个或多个虚拟机服务器上并保持空闲的虚拟机池;虚拟机首先从该池中选择,如果需要附加容量,按需实例化附加的虚拟机。在该实施例的变体中,预先实例化的虚拟机池的大小根据历史要求增加或减少。在另一个实施例中,虚拟机简单地按要求实例化。
[0026]在用于构建的虚拟机被标识后,在步骤204确定应被传输到工作者虚拟机以构建那些分支的文件列表。在一个实施例中,步骤204如子步骤204(a) — 204(f)所示那样完成。在步骤204(a),用于构建全部所选分支的全部文件的列表被编译。在某些实施例中,此信息从构建配置文件中获得。接着,在步骤204(b),对如此标识的每个文件重复后续步骤204 (c) - 204(e)。在步骤204 (c),将需要那个文件来构建分支的一个或多个虚拟机(VM)被标识。在步骤204(d),确定被如此标识的每个VM是否已经具有该文件的副本。VM可能已经从例如构建使用该文件的另一个分支或从构建当前分支的先前版本(如果该文件在当前分支中保持不变)而拥有该文件的副本。在某些实施例中,文件被优先加载到VM上,这些VM可能稍后使用它们来利用原本未被使用的传输带宽和/或存储空间。如果确定该VM还没有该文件,则在步骤204 (e),将该文件添加到要被传输到那个VM的文件列表。否则,处理返回到步骤204(b)来考虑下一个文件。一旦每个文件已经被步骤204(c) - 204(e)处理了,那么要被传输到每个VM的文件列表在步骤204(f)终结。
[0027]一旦要被传输的文件在步骤204被标识,则在步骤206,从一个或多个源储存库检索它们。如上面所描述的,在一些实施例中,某些文件可能已经因多个原因之一而存在于本地存储中,那么这些文件不需要被检索。接着,在步骤208,先前标识的文件被传输到合适的虚拟机。注意某些文件可能被多个虚拟机使用,且因此被传输到那些机器中的每一个。在一个实施例中,为了最小化文件传输的网络开销,根据虚拟机将需要的文件的共性程度来将虚拟机分组到虚拟机服务器上。在另一个实施例中,根据虚拟机将需要的文件和先前高速缓存在该虚拟机服务器上的文件之间的共性程度来将虚拟机分配到虚拟机服务器。
[0028]接着,在步骤209,构建环境被按需分发到虚拟机。在某些实施例中,构建环境则在源文件被传输到虚拟机之前被分发到虚拟机。构建环境的一个角色是驱动构建过程。在一些实施例中,构建环境包含响应于构建服务控制器、提供活动状态并执行命令的代理。在另一些实施例中,构建环境直接响应用户输入以执行活动。该构建环境还可包括工具和构建组件,诸如编译器、汇编器、链接器和其它工具,以及用于处理源文件以生成二进制代码文件的工作流。
[0029]在这一点上,虚拟机可通过处理源文件以生成二进制代码文件来开始构建过程。在本发明的一个实施例中,每个虚拟机负责生成与给定分支相关联的全部二进制代码文件。在另一个实施例中,每个虚拟机负责生成单个二进制代码(即,虚拟机的数量与二进制代码的数量相同)。在又一个实施例中,要生成的全部二进制代码文件集以这样的方式跨可用虚拟机进行分派,以便均衡每个虚拟机执行的处理。在又一个实施例中,对应于一个以上分支的不同分支的多个二进制代码文件被分派到单个虚拟机。也构想了在可用虚拟机之间分派要构建的二进制代码的其它方式。将二进制代码分派到虚拟机将分别通知在步骤204和208的文件的标识和传输。在步骤210,虚拟机处理合适的源文件以生成二进制代码文件。在一些实施例中,另一个组件,诸如图3的构建服务控制器302使得虚拟机开始该处理。在此,“处理”文件可包括预处理、编译、汇编和链接等等步骤,而“二进制代码文件”可包括本机可执行文件、中间表示文件、字节代码表示文件、对象文件和库文件等等。类似地,“使得”可涵盖各种技术,包括直接代码执行、进程间通信、客户机一服务器或对等消息收发、远程命令执行、web服务、或远程脚本调用。如本领域的技术人员可以清楚,也可预想用于使得虚拟机处理文件的其它技术。
[0030]按照用户输入、构建配置文件、或其它一般策略,某些所生成的二进制代码文件可被数字签名以便认证它们的源、未经篡改状态,或出于其它原因。所采用的数字签名算法可包括诸如RSA、DSA、椭圆曲线DSA、ElGamal或其它安全数字签名算法的算法。在许多环境中,出于安全目的,签名过程所需的数字键仅存储在少量位置,且因此不被分发到各虚拟机。因此,在一些实施例中,在二进制代码被生成之后,在步骤212,它们被传输到专门的签名服务器用于签名。接着,在步骤214,生成相应的数字签名。在一些实施例中,另一组件,诸如要结合图3讨论的构建服务控制器302,使其以各种方式的任何一种来发生,如上所述。在该实施例的一种变体中,代替传输二进制代码,合适的虚拟机生成足以生成签名的二进制代码的表示。例如,许多数字签名算法实际上签署文件的安全散列而不是整个文件;因为在此示例中生成该散列不需要签名密钥,虚拟机自身可生成该散列并仅将那个发送到签名服务器。该方案具有减少签名服务器的工作负荷以及与传送二进制代码文件相关联的网络负荷的双重优势:代替传送(可能很大的)二进制代码文件,仅发送(通常小于IkB的)散列。在此和贯穿本文“发送”包括直接发送和通过使某物被发送而间接发送两者。在步骤216,所生成的签名被传输回虚拟机。在一些实施例中,由数字签名的附加而修改了的二进制代码而不是分离的签名被传输回到虚拟机。术语“签名”在此,包括分离的签名和以此方式修改的二进制代码两者。一旦该二进制代码文件和签名已被收集,它们在步骤218被汇编成二进制代码包。在一些实施例中,另一组件,诸如图3的构建服务控制器302,使其以各种方式的任何一种来发生,如上所述。在一些实施例中,这些二进制代码包还包含不受构建过程影响的数据文件。在一些实施例中,二进制代码包的汇编在那些二进制代码文件和该包的数字签名已被收集后就立刻开始;在其它实施例中,直到构建和签名生成过程已经完全结束后,包生成过程才开始。一旦包已经被生成,它们被传输离开虚拟机。在一个实施例中,这通过在步骤220将它们发布到存储服务来完成。在另一个实施例中,一个或多个虚拟机用作储存库并直接服务于虚拟机。最后,在一些实施例中,在步骤222生成用户通知。这个用户通知可以采取各种形式,诸如电子邮件、即时消息、电话呼叫、应用中的弹出警告,或其它警告。
[0031]现在转到图3,呈现了适合于实现本发明的各实施例的环境,并且该环境被概括地指代为附图标记300。在一些实施例中,构建服务控制器302用作系统的中央控制器,并功能性地连接到其它组件。在一些实施例中,连接通过LAN、WAN或因特网连接。这些连接可以是直接或间接的。在其它实施例中,系统300的组件是概念性的且几个组件可被组合成单个物理服务器;在那些情况下,连接采用共享存储和/或进程间通信形式。在一些实施例中,构建服务控制器维持元数据以跟踪工作者VM到代码分支的映射。在一些实施例中,构建服务提供了前端以接收用户输入、显示作业状态并提供对构建度量的访问。在一些实施例中,构建控制器可负责调度用于将来执行的构建过程。这可采取推迟构建直到系统负载更低,或在预期的要求低的时段调度构建的形式。也构想了其它调度试探。在一些实施例中,构建控制器负责动态虚拟机调度。这可以采取增加或减少专用于构建过程的虚拟机数量的形式。这也可以采用将虚拟机从忙碌的虚拟机服务器迁移到另一个较不忙碌的虚拟机服务器的形式。这还可以采取在单个虚拟机内操纵虚拟机的调度以,例如,相比于向轻工作负荷的虚拟机而言向重工作负荷的虚拟机分派更多的资源的形式。还构想了其它形式的动态虚拟机调度。连接到构建服务控制器的是一个或多个源储存库,诸如源储存库304和源储存库306。每个这样的源储存库具有相关联的存储,分别是存储308和存储310。与源储存库相关联的存储可以是本地存储、网络附连存储、基于云的存储,或源储存库可访问的其它存储。在一些实施例中,可能仅仅存在单个源储存库;在其它实施例中,存在许多源储存库。
[0032]类似地连接到构建服务控制器302的是存储服务312,它使得二进制代码包(在某些实施例中,也可以其它文件)对用户可用。在一些实施例中,存储服务312是耐久的且高度可用的存储服务,诸如地理复制的基于云的存储服务。在一些实施例中,存储服务312以及诸如源储存库304的源储存库的功能被组合到单个物理服务器中。在其它实施例中,存储服务312和源储存库304是分开的物理服务器但是共享公共后端存储,诸如存储308。在一些实施例中,存储服务312存储被部署在所创建的虚拟机上的构建环境。在其它实施例中,构建环境被存储在诸如源储存库304的源储存库上。在又一些实施例中,构建环境被存储在构建服务控制器302上,它们从中被部署。还构想了任何存储方案的组合。同样连接到构建服务控制器302的是签名服务器314。签名服务器314执行为所生成的二进制代码文件生成数字签名的服务,如上面结合图2的步骤212、214和216所讨论的。签名服务器314存储用于生成数字签名的签名密钥316。
[0033]最后,构建服务控制器302被连接到一个或多个虚拟机服务器,诸如虚拟机服务器318和320。每个虚拟机服务器表示潜在地运行诸如虚拟机322和324的多个虚拟机的一个物理计算机。在一些实施例中,在任何给定时间,虚拟机的一些或全部可被专用于不与构建服务相关的其它任务。在一些实施例中,虚拟机服务器318和320是私有或公共计算云的一部分。在一些实施例中,虚拟机在需要时被实例化,而在它们变得不需要或不使用时被破坏或被垃圾收集。在一些实施例中,构建服务控制器302根据构建服务的需要来缩放所使用的工作者VM的数量。诸如虚拟机322的每个虚拟机被加载了用于产生二进制代码包的一些源和数据文件326的集合,如被加载到虚拟机上的构建环境所通知的。注意到由虚拟机324存储的文件328可能与虚拟机322所存储的文件326或与虚拟机存储在虚拟机服务器320上的文件完全重叠、部分重叠,或不重叠。图3描绘的构建系统的任何组件可利用一个或多个处理器和/或存储器来执行在此描述的功能。
[0034]现在转到图4,呈现了根据本发明的另一方面的流程图图示。图4描绘了适于由诸如虚拟机322的虚拟机执行的方法,并且该方法被概括地指代为附图标记400。最初,在步骤402,接收零个或更多个源文件。所接收到的文件,结合零个或多个已经本地存储的文件,足以产生一个或多个二进制代码文件。共同地,这些文件可对应于图3的文件326。接着,在步骤404,这些文件被处理以生成一个或多个二进制代码文件。在步骤406,所生成的二进制代码文件的表示被发送到签名服务器。在一些实施例中,这些表示被直接发送到签名服务器;在其它实施例中,它们被发送到将它们转发到签名服务器的构建服务控制器或其它中间主机。在一些实施例中,“表示”包括要被签名的整个二进制代码文件;在其它实施例中,表示包括足以用于签名生成的更少量的信息,诸如要被签名的二进制代码的抗冲突密码散列。在又一些实施例中,诸如私有或测试构建的情况,签名二进制代码的步骤可忽略。
[0035]接着,在步骤408,接收对应于要被签名的二进制代码文件的数字签名。同样,这些数字签名可直接从签名服务器接收或间接通过构建服务控制器或另一个中间主机来接收。在步骤410,这些数字签名,连同一个或多个对应的或未经签名的二进制代码文件被用来生成二进制代码包。最后,在步骤412,这些二进制代码包被传输到另一个主机。在一些实施例中,它们可被传输到诸如存储服务312的存储服务以便被发布。在其它实施例中,二进制代码包可被发送到构建服务控制器302。在又一个实施例中,它们被发送到发起该构建过程的用户的计算机。
[0036]图5描绘了根据本发明的各实施例适于由诸如源储存库304的源储存库执行的方法,并且该方法被概括地指代为附图标记500。最初,在步骤502,接收对一个或多个源文件的请求。在一个实施例中,从图3的构建服务控制器302接收该请求。在另一个实施例中,从诸如图3的虚拟机服务器318上运行的虚拟机322的虚拟机接收该请求。接着,在步骤504,所请求的文件被从存储检索并被传输。在一个实施例中,它们被传输到请求者;在另一个实施例中,它们被传输到诸如构建服务控制器302或虚拟机服务器318的另一个主机用以高速缓存并转发到请求者。
[0037]图6描绘了根据本发明的各实施例适于由诸如签名服务器314的签名服务器执行的方法,并且该方法被概括地指代为附图标记600。最初,在步骤602,接收一或多个二进制代码文件的表示。在一个实施例中,从诸如图3的虚拟机322的虚拟机直接接收请求。在另一实施例中,通过构建服务控制器或其它中间主机接收请求。如上面讨论的,在一些实施例中,表示是要被签名的整个二进制代码文件,而在其它实施例中,表示是足以用于签名生成的更少量的信息。在一些实施例中,签名服务器执行附加步骤,诸如病毒扫描、正确形式的验证,以及在生成签名前构建位置的确认。接着,在步骤604,对应于一个或多个表示的一个或多个数字签名被生成。这可以通过多个公知数字签名算法的任何一个,并采用图3的数字签名密钥316来完成。最后,在步骤606,所生成的一个或多个签名被发送回请求者。
[0038]图7描绘了根据本发明的各实施例适于由诸如图3的构建源控制器302的构建源控制器执行的方法,并且该方法被概括地指代为附图标记700。最初,在步骤702,确定要构建的一个或多个分支的列表。在一个实施例中,基于用户输入作出构建哪些分支的决定。在另一个实施例中,咨询配置文件以确定构建哪些分支。在又一个实施例中,当前构建环境被用于确定构建哪些分支。接着,在步骤704,应该被传输到工作者虚拟机以构建那些分支的文件列表被确定。在一个实施例中,这可以如步骤204(a) - 204(f)中所描述的并伴随图2的讨论来完成。一旦文件已被标识,在步骤706,它们被从诸如图3的源储存库304和源储存库306的一个或多个源储存库中检索,并在步骤708,被传输到合适的虚拟机。同样,某些文件可能被多个虚拟机使用,且因此被传输到那些机器的每一个。在一个实施例中,为了最小化文件传输的网络开销,根据虚拟机将使用的文件的共性程度将虚拟机分组到虚拟机服务器上。在另一个实施例中,所传输的文件的副本被保持,使得如果将来它们再次被需要,那么它们不需要从源储存库重新被取回。
[0039]接着,在步骤710,要被签名的二进制代码文件的表示在计算机执行方法700被接收;在某些实施例中,这将是图3的构建服务控制器302。在一个实施例中,从生成二进制代码文件的虚拟机接收它们。在一个实施例中,接收整个二进制代码文件并生成更紧凑的表示用于后续重新传输。接着,在步骤712,表示被转发(例如,发送)到诸如签名服务器314的签名服务器。接着,在步骤714,对应于该表示的数字签名从签名服务器接收回,并在步骤716,它们被转发到合适的虚拟机。在一些实施例中,合适的虚拟机是创建对应二进制代码文件的虚拟机;在其它实施例中,这是负责二进制代码包创建的另一个虚拟机。在步骤718,包括对应于源文件的二进制代码文件以及数字签名的二进制代码包被接收。在一个实施例中,从创建它们的虚拟机接收它们。在另一个实施例中,它们还包括未被构建过程改变的数据文件。接着,在步骤720,这些包对后续检索可用。在一个实施例中,这通过将它们发布到存储服务来完成。在另一个实施例中,这通过将它们传输到预先确定的位置来完成。在又一个实施例中,这通过将它们本地存储直到它们被用户检索来完成。最后,在步骤722,生成通知来警告用户包可用。该通知可以采取结合图2的步骤222所讨论的任何形式。
[0040]现在转到图8,描绘了根据本发明的又一个方面的流程图图示,其适于由诸如图3的虚拟机服务器318的虚拟机服务器来执行,并且该流程图图示被概括地指代为附图标记800。在一些实施例中,图3的虚拟机服务器318是单个物理机器,诸如膝上型计算机、台式计算机或服务器级计算机。在其它实施例中,虚拟机服务器318本身可以是诸如服务器场的分布式计算环境。
[0041]最初,在步骤802,接收一个或多个分支的列表和源文件。在一个实施例中,仅接收源文件的一个列表,且源文件从诸如源储存库304的源储存库检索。在另一个实施例中,源文件与一个或多个分支的列表一起接收。接着,在步骤804,一个或多个虚拟机被实例化。如上面对向虚拟机分派二进制代码的讨论中所讨论的,构想了多个分派策略,且所使用的精确的分派策略将通知实例化的虚拟机数量。步骤804还包括准备虚拟机来参与构建服务。准备包括构建环境的部署。在实例化期间,构建环境可被加载到工作者VM上,或在实例化后,构建环境可被构建系统控制器302推送到工作者VM上。在虚拟机已经被实例化之后,在步骤806,合适的源文件被传输到每个虚拟机。
[0042]接着,在步骤808,从那些源文件生成的二进制代码文件被从虚拟机收集。在一个实施例中,为了对它们进行签名的目的,二进制代码文件的紧凑表示被生成。接着,在步骤810,获得二进制代码的数字签名。在一个实施例中,这通过直接与图3的签名服务器314进行通信来完成;在另一个实施例中,这通过经由图3的构建服务控制器302来与签名服务器314进行通信来完成。在步骤812,从二进制代码文件、数字签名和在一些实施例中的其它数据文件,来生成二进制代码包。接着,在步骤814,使得这些二进制代码包对检索可用。在一个实施例中,这包括将它们传输到它们要从那儿被检索的位置。在另一个实施例中,它包括将它们置于VM上的公知本地位置,软件代理或人可从那儿检索它们。最后,在步骤816,生成通知。在一个实施例中,这是用户通知;在另一个实施例中,它包括通知软件代理。
[0043]本发明的替换实施例和实现在本领域的技术人员仔细阅读了本说明书包括附图之后将变得显而易见。因此,本发明的范围由本文档以下的“权利要求”部分中的权利要求,而非前面的描述,来限定。
【权利要求】
1.一种或多种其上包含有计算机可执行指令的计算机存储介质,所述计算机可执行指令在执行时,使得计算设备执行一种分发能缩放的构建服务的方法,所述方法包括: 确定要构建的分支; 标识用于构建所述分支的至少一部分的虚拟机; 标识要为所述分支传输的多个源文件,其中所述虚拟机处理所述多个源文件中的至少一个源文件来生成对应的二进制代码文件; 将所述多个源文件中的所述源文件传输到所述虚拟机, 在所述虚拟机上部署构建环境; 使得所述虚拟机处理所述多个源文件中的至少所述源文件以便生成二进制代码文件; 使得所述二进制代码文件的数字签名被生成; 将所述数字签名传输到第二虚拟机;以及 使得至少所述第二虚拟机从至少所述二进制代码文件和所述数字签名生成二进制代码包。
2.如权利要求1所述的计算机存储介质,其特征在于,所述方法还包括: 生成所述二进制代码包能够用于检索的用户通知。
3.如权利要求1所述的计算机存储介质,其特征在于,标识要被传输的多个源文件包括: 获得用于构建所述分支的源文件的列表; 为用于构建所述分支的所述源文件列表的所选的源文件确定: (1)所选源文件要被传输到的目的地虚拟机; (2)所述目的地虚拟机当前是否存储着基本上与所选源文件相同的源文件;以及 a)如果所述目的地虚拟机当前存储着基本上与所选源文件相同的源文件,则将所选源文件标识为不要被传输;以及 b)如果所述目的地虚拟机当前未存储基本上与所选源文件相同的源 文件,则将所选源文件标识为要被传输。
4.如权利要求1所述的计算机存储介质,其特征在于,标识用于构建所述分支的至少一部分的虚拟机包括: 确定第一虚拟机服务器是否具有空闲虚拟机; 如果所述第一虚拟机服务器具有空闲虚拟机,则将所述空闲虚拟机标识为用于构建所述分支的至少一部分的虚拟机;以及 如果所述第一虚拟机服务器不具有空闲虚拟机,则实例化新虚拟机并将所述新虚拟机标识为用于构建所述分支的至少一部分的虚拟机。
5.一种能缩放且分布式的构建服务系统,包括: 多个虚拟机,其中的每个虚拟机被适配于执行以下功能: (1)接收源文件; (2)处理至少所述源文件以生成二进制代码文件; (3)接收对应于所述二进制代码文件的数字签名;以及 (4)从至少所述二进制代码文件和所述数字签名来生成二进制代码包;适配于执行以下功能的第一源储存库: (1)存储所述源文件;以及 (2)将所述源文件发送到构建服务控制器; 适配于执行以下功能的签名服务器: (1)接收足以为所述二进制代码文件生成数字签名的所述二进制代码文件的表示;以及 (2)生成对应于所述二进制代码文件的所述表示的数字签名; 构建服务控制器,功能性地连接到所述多个虚拟机、所述第一源储存库和所述签名服务器,并使用处理器和存储器来执行以下功能: (1)确定要构建的分支; (2)标识要为所述分支传输的多个源文件; (3)从至少所述第一源储存库检索所述多个源文件; (4)将所述多个源文件中的第一源文件发送到所述多个虚拟机中的第一虚拟机; (5)接收足以为所述二进制代码文件生成所述数字签名的所述二进制代码文件的表示,并将所述表示转发到所述签名服务器;以及 (6)接收所述数字签名并将所述数字签名转发到所述多个虚拟机中的第二虚拟机。
6.如权利要求5所述的系统,其特征在于,所述构建系统控制器还执行将所述多个二进制代码包发布到存储服务的功能。
7.如权利要求5所述的系统,其特征在于,所述构建系统控制器还执行为将来的执行调度构建过程的功能。
8.如权利要求5所述的系统,其特征在于,所述构建系统控制器还执行生成所述多个二进制代码包是可用的的用户通知的功能。
9.如权利要求5所述的系统,其特征在于,所述构建系统控制器执行为所述分支标识要被传输的多个源文件的功能的至少以下子功能: 获得用于构建所述分支的源文件的列表; 为用于构建所述分支的所述源文件列表的所选源文件确定: (1)所选源文件要被传输到的目的地虚拟机; (2)所述目的地虚拟机当前是否存储着基本上与所选源文件相同的源文件;以及 a)如果所述目的地虚拟机当前存储着基本上与所选源文件相同的源文件,则将所选源文件标识为不要被传输;以及 b)如果所述目的地虚拟机当前未存储基本上与所选源文件相同的源文件,则将所选源文件标识为要被传输。
10.一种适于用于分布式计算环境中的计算机实现方法,所述方法利用处理器和存储器来实现能缩放的且分布式的构建服务,所述方法包括: 在单个物理机器处,接收对应于要被生成的多个二进制代码文件的多个源文件; 在单个物理机器上实例化多个虚拟机,所述多个虚拟机中的每个虚拟机用构建环境来配置,其中所述多个虚拟机是与要在所述单个物理机器上生成的二进制代码文件数量相等数量的虚拟机; 向所述多个虚拟机中的每个虚拟机发送对应于所述多个二进制代码文件中的各单个二进制代码文件的那些源文件; 使得所述多个虚拟机中的每个虚拟机从所述源文件生成各二进制文件; 使得为多个所生成的二进制代码文件中的至少一个二进制代码文件生成数字签名;以及 使得包括二进 制代码文件和对应的数字签名的二进制代码包被生成。
【文档编号】G06F9/44GK103765379SQ201280042013
【公开日】2014年4月30日 申请日期:2012年7月27日 优先权日:2011年8月30日
【发明者】M·E·朱伯兰, V·齐布林克, A·格沙夫特, V·彼得连科 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1