具体实施方式
在一个实施例中,本发明包括分布式构建环境,其中一个或多个第一计算机向一个或多个第二计算机授权软件映像的创建(如安装和配置)。具体地,至少一个服务器生成要由至少一个分布式客户完成的成映像工作项目列表(如作业)。该列表在服务器配置和生成构建的环境的基础上生成。在创建工作项目列表之后,任一可用的成像客户机能够从任一服务器选择并完成工作项目。每一工作项目仅由一个客户机选择并完成。客户机安装、配置操作***并对其成像,然后将最终映像上传回服务器。服务器向客户机提供指令(如,通过脚本机制)来完成作业。当客户机完成作业之后,客户机用完成状态来更新服务器。然后客户机搜索另一作业来接受并完成。
本发明的分布式构建环境包括客户机上的最小配置,简化了客户机的重新分配和重新分布。该分布式环境向任一服务器分配额外的客户机资源。另外,该进程是可伸缩的(scalable)。因为一个成像客户机可以创建多个不同的产品映像,因此可以通过添加额外的成像客户机来减少构建次数。安装多个成像客户机并配置多个软件映像显著地提高了客户机资源使用率和效率。例如,现有***中,如果需要为7个不同的产品的6个版本或配置构建映像,则需要42个专用计算机来构建所有的映像。然而,采用本发明,单个计算机可以接连地构建每一映像,由此减少了处理硬件的数量和成本。
首先参考图1,结构图说明了在本发明的分布式构建环境中使用的客户机/服务器网络***的示例性实施例。图1示出了网络***50包括多个服务器51和客户机52。这些计算机51、52通过网络53采用著名的网络化技术连接,用于高速数据通信。因特网是网络53的一个示例。服务器51从大量远程网络客户机53接受请求。服务器51通过网络53向客户机52提供包括数据在内的响应,然而也可以使用其它的通信方式。本发明参考服务器51和客户机52来描述,然而发明人认为本发明在其它网络***中也可操作。也即,本发明并非局限于图1所示的客户机/服务器网络***50。例如,本发明可以在对等网络***中应用。
下面参考图2,示例结构图说明了依照本发明的客户机52和服务器51之间的通信。在图2中,服务器计算机51,如服务器A和服务器B,各自与多个客户计算机52,如客户机X、客户机Y和客户机Z进行通信,以在分布式构建环境中授权所安装的软件映像的创建。每一服务器计算机51担当第一计算机,操作以维护作业列表。每一作业与至少一个与已安装的软件映像的创建相关联的操作有关。例如,每一软件产品可能有一项作业,每一服务器51可能有多项作业。每一客户计算机52担当第二计算机,操作以从第一计算机接受一项作业并通过执行与其关联的操作来完成所接受的作业。具体地,该操作包括安装、配置软件并对其成像。第二计算机(如客户计算机52)将已安装并已配置的软件映像传送到第一计算机(如服务器计算机)。
在一个形式中,服务器计算机51和服务器软件组成用于维护作业列表的列表装置202。客户计算机52和客户机软件组成用于从服务器计算机51接受一项作业的接口装置204。客户计算机52和客户机软件也组成用于通过执行一个或多个与该作业相关联的操作来完成所接受的作业的安装装置206。完成的作业代表已安装的软件映像。与列表装置、接口装置和安装装置相应的结构还包括图示并在这里描述的元件。此外,与配置已安装的软件映像的装置(未示出)相应的结构包括客户机计算机52、客户机软件以及图示并在这里描述的元件。
下面参考图3,示例性结构图说明了使用主服务器302来维护来自所有服务器51的对所有客户机52的作业。在图3的示例实施例中,每一客户计算机52轮询或定位主服务器302。主服务器302维护可用服务器计算机51的列表,并有规律地(如基于请求或广播)向每一客户计算机52传递该列表。客户计算机52访问该列表来找出具有将要授权并完成的作业的服务器51(如服务器A)。该作业而后可以通过主服务器302或者通过服务器51和客户机52之间的对等连接授权给客户机52。在另一实施例中,客户计算机52与多个主服务器302的至少一个进行通信。
下面参考图4,示例性流程图说明了依照本发明的客户机软件的操作。客户机软件包括计算机可执行指令,用于在402从服务器51请求作业、在404接受该作业并在406通过执行该操作来完成所接受的作业。接受作业包括接连地与每一服务器51进行通信来标识与服务器51相关联的一项或多项作业。每一服务器51在与服务器51相关联的特定文件(如图7中的relbuild.xml)中储存可用作业的列表。客户计算机52访问服务器51上的特定文件来标识可用作业。在一个形式中,每一服务器51也储存与每一作业相关联并储存在服务器51可访问的媒质上的作业状态文件(如图7中的job_id.xml)。客户计算机52通过与作业相关联的作业状态文件对每一作业确定其可用性状态。例如,缺少作业状态文件指示该作业的可用性。
每一作业具有其相应的优先级。作业列表依照每一作业的优先级来组织。由此,客户计算机52选择最高优先级的作业(如通过选择标识的作业的第一项)。另外或作为选择,客户计算机52可能接受由服务器51之一分配的作业。接受作业之后,客户计算机52创建一个与该作业相关联的文件(如图7中的job_id.xml)来指示客户计算机52当前在执行与该作业相关联的操作。该文件储存在与客户计算机52和/或服务器计算机相关联的计算机可读媒质上。为如图7所示的在与服务器计算机相关联的媒质上储存该文件,客户计算机52向服务器51提供证书来鉴别。
本领域的技术人员可以注意到,也存在其它方法用于指示一项作业被客户计算机52之一接受。例如,每一服务器51上的作业列表可能包括指示客户52已接受该作业的字段。发明人认为,所有这类方法都包含在本发明的范围之内。
客户计算机52也可以下载指令,如任务列表或脚本来完成作业。在另一实施例中,指令包括软件组件,如完成作业中使用的库或其它对象文件。客户机软件包括指令,用于在408配置已安装的软件映像,并在410向从其接受作业的服务器51发送回已安装的软件映像。已安装的软件映像代表准备好展开的操作***和/或应用程序。
计算机52可访问的一个或多个计算机可读媒质具有用于执行图4所示的方法的计算机可执行指令。在一个实施例中,客户计算机52在运行、最小操作***环境的语境下执行指令。
在特定的示例中,客户机软件执行以连续地向(多个)服务器轮询已标帖的作业。对特定服务器51标帖的每一作业,客户机软件确定该作业的当前状态。在一个实施例中,客户机软件搜索与作业相关联的作业状态文件(见图7)的缺乏或存在。如果每一作业的作业状态文件指示没有来自特定服务器51的可用作业,则客户机软件接连地向另外的服务器51轮询已标帖的作业。
如果来自特定服务器51有一个或多个可用的作业,则客户机软件执行以接受其中一项作业。例如,客户机软件可以接受第一可用作业(如果按优先级排列)或接受由标帖作业的服务器51分配的作业。接受与服务器计算机51之一相关联的作业之一之后,客户机软件使用证明在服务器计算机上创建文件(如图7中的job_id.xml)来指示该作业已接受。客户机软件还可以在本地创建相应的状态文件。客户机软件执行与所接受的作业相关联的操作来完成该作业。例如,操作可以包含在脚本中,来创建、安装、定制、配置和/或修改软件映像(如操作***或应用程序的映像)。完成作业之后,客户机52储存以后能够发送到其它地方(如,到标帖该作业的服务器计算机)的已安装并已配置的软件映像。
客户机52的一个示例性脚本包括操作,如以下的一个或多个:配置或格式化硬盘驱动器、下载特定的文件用于设立、开始或装入设立、完成设立、激活客户机52、启动进入最小操作***环境、创建操作***的映像以及将完成的映像上传到服务器51。
下面参考图5,示例性流程图说明了依照本发明的服务器软件的操作。服务器软件包括计算机可执行指令,用于在502动态地创建并维护作业列表。每一作业与已安装的软件映像的创建(如安装并配置软件映像)相关。服务器计算机将已维护的列表标帖为客户机计算机52可访问的网络资源(如在存储媒质上)。每一客户机计算机52选择一项或多项作业,并执行所选择的作业。该列表包括可用于客户机计算机52选择的作业、已选择的作业和已执行(如已完成)的作业。
维护包括根据用户输入将作业添加到列表以及在列表中组织作业。作业列表储存在服务器51和客户机计算机52可访问的文件(如图7中的relbuild.xml)中。维护包括在504从客户机计算机52之一接收与客户机计算机52选择并执行的作业之一相应的已创建并已配置的软件安装。作为对接收已完成作业的响应,在506,服务器计算机将该作业从列表中移除。软件安装可以包括操作***和/或应用程序。一个或多个计算机可读媒质具有用于执行图5所示的方法的计算机可读指令。
如果在某一时间段内作业未能被客户机计算机52接受,服务器51通知作业的创作者。例如,该时间段可预设或可由创作者配置。创作者可以根据特定的作业选择时间段。在一个实施例中,服务器51在时间段过去之后从列表中移除未接受的作业。创作者或服务器51也可以指定一个时间段来完成所接受的作业。在一个实施例中,如果客户机52未能在该时间段内完成所接受的作业(如,客户机52遇到故障和中止),服务器51收回所接受的作业使其能够被其它客户机52所用。在从服务器51的故障中恢复之后,服务器51向客户机52重新标帖未完成的作业列表,客户机52回收其相应的作业,并且成像工作如服务器51故障之前继续。
在一个具体示例中,服务器软件执行以对每一作业区分优先级并储存在一个文件中,如relbuild.xml。优先级可以基于最后期限或其它任一因素,并通过用户输入接收或储存在配置文件中。服务器51还执行服务器软件来引发安装共享并使relbuil.xml对用户计算机52可用。服务器软件等待作业完成。在一个形式中,从客户机52接收已完成的映像之后,服务器软件使用完成的软件映像来创建网络共享。
下面参考图6,结构图说明了与客户机计算机52相关联的计算机可读媒质602。媒质602储存分布式构建环境中的数据结构604。数据结构604包括服务器路径606和证书608。服务器路径606定义了到服务器51的路径(例如,网络地址如//server/install)。证书608与客户机52相关的标识符相关联,以在服务器51和客户机52之间的通信过程中进行鉴别。客户机52通过标识符、证书608和服务器路径606与服务器51进行通信,来向服务器51指示客户机52正在执行与软件映像的安装相关联的操作。
下面参考图7,结构图说明了与服务器计算机51相关联的示例计算机可读媒质702。媒质702储存分布式构建环境中的数据结构704。数据结构704代表一项或多项作业。数据结构704包括作业标识符706以及脚本708。作业标识符706与特定的作业相关联。脚本708定义了与作业标识符706相关联、将要由客户机52执行来安装软件映像的多个操作。如上所述,每一作业具有相应的优先级,并且在数据结构705中按照相应的优先级组织每一作业。脚本708还定义了配置已安装的软件映像的操作。
图7中的计算机可读媒质702储存另一数据结构710。数据结构710代表与软件映像的安装相关联的状态。客户机52和服务器计算机51访问数据结构710来确定安装的状态。数据结构710包括客户机标识符712和安装状态714或其它描述符。客户机标识符712标识客户计算机52。安装状态714指示由客户标识符712标识的客户计算机52执行的安装的状态。例如,安装状态714可能指示安装已完成或正在进行。如果安装仍在进行,则安装状态714还可指示完成的百分比和/或估计完成剩余时间。客户计算机52使用客户计算机52完成作业的状态来更新数据结构710。尽管在图7中示出作业状态数据结构710储存在服务器计算机可读媒质702中,发明者认为它也可以替换或另外储存在图6的客户计算机可读媒质602中。
图8以计算机130的形式示出了一个通用计算装置的示例。在本发明的一个实施例中,计算机,如计算机130,适合于在这里说明并描述的其它示图中使用。计算机130具有一个或多个处理器或处理单元132以及***存储器134。在说明的实施例中,***总线136将包括***存储器134的各类***组件耦合至处理器132。总线135代表一个或多个任一各类总线结构,包括存储器总线或存储器控制器、***总线、加速图形端口以及使用任一各类总线结构的处理器或本地总线。作为示例而非限制,这类结构包括工业标准体系结构(ISA)总线、微通道结构(MCA)总线、增强ISA(EISA)总线、视频电子标准协会(VESA)本地总线以及外设部件互连(PCI)总线,也称为Mezzanine总线。
计算机130通常至少具有某些形式的计算机可读媒质。计算机可读媒质包括易失和非易失媒质、可移动和不可移动媒质,可以是任一可由计算机130访问的可用媒质。作为示例而非局限,计算机可读媒质包括计算机存储媒质和通信媒质。计算机存储媒质包括易失和非易失、可移动和不可移动媒质,以任一用于储存如计算机可读指令、数据结构、程序模块或其它数据的信息的方法或技术实现。例如,计算机存储媒质包括RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储设备、或任一可用来储存期望的信息并可由计算机130访问的媒质。通信媒质通常配备计算机可读指令、数据结构、程序模块或在如载波或其它传输机制的已调制数据信号中的其它数据,并包括任意信息传送媒质。本领域的技术人员熟悉已调制数据信号,该信号以某一方式设定或改变其一个或多个特征来对信号中的信息进行编码。有线媒质,如有线网络或直接连线连接,是通信媒质的示例。上述任一组合也包含在计算机可读媒质的范围内。
***存储器134包括以可移动和/或不可移动、易失和/或非易失存储器形式的计算机存储媒质。在说明的实施例中,***存储器134包括只读存储器(ROM)138和随机存取存储器(RAM)140。基本输入/输出***142(BIOS),包含如在启动时协助在计算机130内的元件之间传输信息的基本例程,通常储存在ROM 138中。RAM 140通常包含处理单元132立即可访问和/或当前正在执行的数据和/程序模块。作为示例而非局限,图8说明了操作***144、应用程序146、其它程序模块148和程序数据150。
计算机130也可包括其它可移动/不可移动、易失/非易失计算机存储媒质。例如,图8说明了对可移动、非易失磁媒质进行读写的硬盘驱动器154。图8还示出了对可移动、非易失磁盘158进行读写的磁盘驱动器156以及对可移动、非易失光盘162,如CD-ROM或其它光媒质进行读写的光盘驱动器160。其它可用在本示例操作环境中的可移动/不可移动、易失/非易失计算机存储媒质包括但不限于,磁带盒、闪存卡、数字多功能盘、数字视频带、固态RAM、固态ROM等等。硬盘驱动器154、磁盘驱动器156和光盘驱动器160通常通过非易失存储器接口,如接口166连接至***总线146。
以上描述并在图8中说明的驱动器或其它大容量存储设备及其关联的计算机存储媒质为计算机130提供了计算机可读指令、数据结构、程序模块和其它数据的存储。在图8中,例如,说明硬盘驱动器154储存操作***170、应用程序172、其它程序模块174以及程序数据176。注意,这些组件可以与操作***144、应用程序146、其它程序模块148和程序数据150相同,也可以与它们不同。这里对操作***170、应用程序172、其它程序模块174和程序数据176给予不同的标号说明至少它们是不同的副本。
用户可以通过输入设备或用户接口选择设备,如键盘180和指向设备182(例如,鼠标、轨迹球、笔或触摸板)来向计算机130输入命令和信息。其它输入设备(未示出)可包括麦克风、操纵杆、游戏板、圆盘式卫星天线、扫描仪等等。这些和其它输入设备通过耦合到***总线136的用户输入接口184连接到处理单元132,也可以通过其它接口和总线结构,如并行端口、游戏端口或通用串行总线(USB)连接。监视器188或其它类型的显示设备也通过接口,如视频接口190连接到***总线136。除监视器188之外,计算机经常包括其它***输出设备(未示出),如打印机和扬声器,可通过输出***接口(未示出)连接。
计算机130可以在使用到一个或多个远程计算机,如计算机194的逻辑连接的网络化环境中操作。远程计算机194可以是个人计算机、服务器、路由器、网络PC、对等设备或其它公用网络节点,并通常包括许多或所有上述与计算机130相关的元件。图8描述的逻辑连接包括局域网(LAN)196和广域网(WAN)198,也可以包括其它网络。LAN 136和/或WAN 138可以是有线网络、无线网络、其组合等等。这类网络化环境常见于办公室、企业范围计算机网络、企业内部互联网以及全球计算机网络(如因特网)。
当在局域网环境中使用时,计算机130通过网络接口或适配器186连接到LAN196。当在广域网环境中使用时,计算机130通常包括调制解调器178或其它装置用于通过WAN 198,如因特网建立通信。调制解调器178可以是内置的也可以是外置的,通过用户输入接口184或其它合适的机制连接到***总线136。在网络化环境中,所描述的与计算机130相关的程序程序模块或其部分可以储存在远程存储器存储设备(未示出)中。作为示例而非局限,图8说明了远程应用程序192驻留在存储器设备中。可以理解,这里示出的网络连接是示例性的,并且可以使用其它在计算机之间建立通信链路的装置。
通常,计算机130的数据处理器用不同时间储存在计算机的各类计算机可读存储媒质上的指令来编程。程序和操作***通常分布在,例如,软盘或CD-ROM中。由此,它们被安装或装载到计算机的二级存储器。当执行时,它们至少部分地被装载到计算机的初级电子存储器中。这里描述的本发明包括这些和其它各类计算机可读存储媒质,这类媒质包含用于结合微处理器或其它数据处理器实现下文描述的步骤的指令或程序。本发明也包括计算机其本身,它被依照这里所述的方法和技术来编程。
为说明目的,程序和其它可执行程序组件,如操作***,在这里示为不连续的块。然而,可以认可,这类程序和组件在各种时间驻留在计算机的不同存储组件中,并由计算机的(多个)数据处理器执行。
尽管结合示例性计算***环境,包括计算机130来描述,本发明可与其它通用或专用计算***环境或结构来操作。计算***环境不意味着任何对本发明的使用或功能范围的局限。而且,不应将计算***环境解释为具有关于示例性操作环境中示出的任一组件或其组合的依赖或需求。著名的适合与本发明使用的计算***、环境和/或结构的示例包括但不限于,个人计算机、服务器计算机、手持式或膝上设备、多处理器***、基于微处理器的***、机顶盒、可编程消费电子产品、网络PC、小型机、大型机、包含上述***或设备的分布式计算环境等等。
本发明可以在由一个或多个计算机或其它设备执行的计算机可执行指令,如程序模块的一般语境下描述。通常,程序模块包括但不限于,例程、程序、对象、组件以及数据结构,执行特定的任务或实现特定的抽象数据类型。本发明也可以在由通过通信网络连接的远程处理设备执行任务的分布式计算环境中实践。在分布式计算环境中,程序模块可以驻留在本地和远程包括存储器存储设备的计算机存储媒质上。
在操作中,客户计算机52,如计算机130执行如图4所示的计算机可执行指令,来安装并配置为软件映像。另外,服务器51,如计算机130执行如图5所示的计算机可执行指令来创建并维护软件成像作业的列表。
例如,服务器计算机51,如计算机130可以在构建后(postbuild)进程中执行两个脚本来准备、例示并完成成像进程。构建后进程在编译和连接之后,但在释放构建之前出现。一个脚本(例如,stagerel.cmd)引发网络上的成像共享并监控作业完成的阶段目录。在成像开始之后,服务器计算机51无限地等待客户机52上传完成的映像。阶段目录中的作业状态文件储存成像进程的当前进度。作业状态文件中的字段MAJORSTATE(见下文)储存至少两个状态中的其中一个:INPROGRESS和FINISHED。所有作业完成之后,脚本通过降低共享并继续移动到下一构建后命令来继续。如果共享无法引发或者如果检测到之前的构建后错误,则脚本不会等待映像。
另一脚本(例如,img_createskus.cmd)在构建后进程中执行两次。当第一次装入脚本时(即,在其它脚本stagerel.cmd之前),它创建名为relbuild.xml的文件,包含成像机器(例如,客户计算机52)所需要的服务器特定的信息和客户机作业。这一脚本第二次在stagerel.cmd之后运行,并将SKU/产品拼装在一起,将所得映像放置在特定目录中。stagerel.cmd脚本等待客户计算机52完成映像,并监控储存作业状态文件的成像目录。在所有作业都被取走并完成之后,stagerel.cmd脚本继续。映像创建可通过观察记录文件来检验。
当客户机52执行作业时,它可以通过删除本地客户机作业状态文件并重新启动客户机52来被回收。客户机52接受的成像作业也可以通过回收客户机52并删除服务器作业状态文件来重新开始。
以下储存在与服务器之一关联的计算机可读媒质上的数据结构的示例进一步说明了本发明。以下示出了与relbuild.xml(见图6)相应的示例***器配置模式。尽管为方便,仅在模式中示出了一项作业,可以认为该模式可以定义多项作业。
<SERVER>
<BUILDTIME></BUILDTIME>
<BUILDNUMBER></BUILDNUMBER>
<LOGFILE></LOGFILE>
<TITLE></TITLE>
<JOBS>
<JOB ID=″″>
<TITLE></TITLE>
<CONFIGTYPE></CONFIGTYPE>
<INSTALLSCRIPT></INSTALLSCRIPT>
<IMAGESCRIPT></IMAGESCRIPT>
<TIMEOUT></TIMEOUT>
</JOB>
</JOBS>
</SERVER>
下列填充的数据结构代表服务器配置模式的一个具体示例。
<SERVER>
<BUILDTIME>20021016:18:00:00</BUILDTIME>
<BUILDNUMBER>3700</BUILDNUMBER>
<LOGFILE>relbuild.log</LOGFILE>
<TITLE>Main Build 3700</TITLE>
<JOBS>
<JOB ID=″1″>
<TITLE>Professional Installation</TITLE>
<CONFIGTYPE>PRO</CONFIGTYPE>
<INSTALLSCRIPT>pro/install.cmd</INSTALLSCRIPT>
<IMAGESCRIPT>pro/image.cmd</IMAGESCRIPT>
<TIMEOUT>3600</TIMEOUT>
</JOB>
</JOBS>
</SERVER>
以下示出了与job_id.xml(见图7)相应的示例作业状态模式。
<JOBSTATUS>
<CLIENTID></CLIENTID>
<TIMESTART></TIMESTART>
<TIMECOMPLETE></TIMECOMPLETE>
<CLIENTSTATUS>
<MAJORSTATE></MAJORSTATE>
<MINORSTATE></MINNORSTATE>
</CLINTSTATUS>
</JOBSATUS>
以下填充的数据结构代表作业状态模式的一个具体示例。
<JOBSTATUS>
<CLIENTID>RACK05 MACHINE10</CLIENTID>
<TIMESTART>20021016:18:01:00</TIMESTART>
<TIMECOMPLETE></TIMECOMPLETE>
<CLIENTSTATUS>
<MAJORSTATE>install</MAJORSTATE>
<MINORSTATE>format</MINNORSTATE>
</CLINTSTATUS>
</JOBSATUS
以下储存在与客户计算机52之一关联的计算机可读媒质上的数据结构的示例说明了本发明。以下示出与buildclient.xml(见图6)相应的示例性客户机配置模式。
<BUILDCLIENT ID″″>
<WAITTIME></WAITTIME>
<CONFIGINCLUDE></CONFIGINCLUDE>
<REDIRECTS>
<REDIRECT>
<USERNAME></USERNAME>
<PASSWORD></PASSWORD>
<CONFIGLOC></CONFIGLOC>
</REDIRECT>
</REDIRECTS>
</BUILDCLIENT>
以下填充的数据结构代表客户机配置模式的一个具体示例。
<BUILDCLIENT ID=″RACK05 MACHINE10″>
<WAITTIME>60</WAITTIME>
<CONFIGINCLUDE>PRO</CONFIGINCLUDE>
<REDIRECTS>
<REDIRECT>
<USERNAME>redmound\bvt</USERNAME>
<PASSWORD>bvtpassword</PASSWORD>
<CONFIGLOC>\\ntre101/bvt$</CONFIGLOC>
</REDIRECT>
</REDIRECTS>
</BUILDCLIENT>
当介绍本发明或其(多个)实施例的元件时,冠词“一个”、“该”以及“所述”意指有一个或多个元件。术语“包括”、“包含”以及“具有”为包含性的,并意指除列出的元件外还有其它另外的元件。
综上所述,可以看到,达到了本发明的若干个目的,并获得了其它优点。
在不脱离本发明的范围的情况下可以在上述构造、产品和方法中作出各种改变,所有包含在以上描述以及在附图中示出的事物都应该解释为说明性的,而非局限。